View Full Version : سوال: نظرسنجی در مورد آپلودتصویرخبر
Shamim832
شنبه 14 اسفند 1389, 12:19 عصر
مهندسین گرامی سلام ،خسته نباشید
می خواستم بپرسم به نظرشما برای درج تصویرخبربهتره اول تصویر روهنگام آپلود ریسایز کرد وبعد آدرسش رودربانک ذخیره کرد وازش استفاده کرد یا اینکه خود تصویر رو با همون اندازه دربانک ذخیره کرد وهنگام نمایش خبراون رو به صورت ریسایز شده نمایش داده؟؟؟؟می دونم میشه هردوروش رو استفاده کرد اما اکثریت معمولا از کدوم روش استفاده میکنن ؟؟؟؟ وکدوم بهتره ؟؟
komeil64
یک شنبه 15 اسفند 1389, 10:56 صبح
روش اول چون عکس ریسایز میشه حجمشم کمتر میشه فضا کمتر می گیره و سرعت لود بالا میره
اما روش وم هیچ مزیتی نداره! که عکس رو همون سایز ذخیره کنیم و موقع نمایش به زور کوچیک نشونش بدیم! چه کاریه!!!!
من از روش اول استفاده می کنم همیشه
alonemm
یک شنبه 15 اسفند 1389, 13:18 عصر
باسلام:
اگر شما قصد دارید از یک عکس در قالب خاصی با اندازه ثابت استفاده کنید بهتره که به اندازه ثابت شما کوچک بشه.
اما اگر در جاهای مختلف با اندازه های مختلف استفاده میشه میتونید از اندازه داده به قاب تصویر اونو نمایش بدید.
موفق باشید.
egoldashraf
یک شنبه 15 اسفند 1389, 13:38 عصر
سلام
روش اول همیشه سریعتره ولی اگه حجم بازدید خیلی زیادی ندارید روش روم بهتره.
egoldashraf
یک شنبه 15 اسفند 1389, 14:00 عصر
روش اول چون عکس ریسایز میشه حجمشم کمتر میشه فضا کمتر می گیره و سرعت لود بالا میره
اما روش وم هیچ مزیتی نداره! که عکس رو همون سایز ذخیره کنیم و موقع نمایش به زور کوچیک نشونش بدیم! چه کاریه!!!!
من از روش اول استفاده می کنم همیشه
در روش دوم هم حجم عکس کم میشه و سرعت لود میره بالا، ولی پردازش بیشتری داریم.
Shamim832
یک شنبه 15 اسفند 1389, 14:53 عصر
ازپاسخ همه عزیزان ممنون
حالا اگه من از روش اول استفاده کنم یعنی همون موقع که تصویر رو آپلود می کنم اول با یه زیربرنامه ای ریشایزش کنم وبعد آدرسش رو توبانک ذخیره کنم چطوری اندازه تصویرم رو به اون زیربرنامه بدم ؟؟ببینید من یه زیربرنامه واسه ریسایز دارم که تصویر ذخیره شده در یک پوشه ای رو می گیره وریسایزش می کنه ،بعدازاون تصویرریسایزشده رو توی یه پوشه دیگه ذخیره می کنه تواین زیربرنامه چه تغییری بدم که مستقیم اندازه تصویررو از FileUploadبگیره وریسایزش کنه؟!
Public Sub Resize_Image(ByVal ImageName As String, ByVal MaxLen As Integer)
Dim Orginal_Image As System.Drawing.Image = System.Drawing.Image.FromFile(Server.MapPath("~/Images/NewsImage/") & ImageName)
Dim ImgWidth, ImgHeight As Integer
Dim ScaleFactor As Double
Dim inp As New IntPtr()
ImgWidth = Orginal_Image.Width
ImgHeight = Orginal_Image.Height
If ImgHeight > ImgWidth Then
ScaleFactor = MaxLen / ImgHeight
ImgHeight = MaxLen
ImgWidth *= ScaleFactor
Else
ScaleFactor = MaxLen / ImgWidth
ImgWidth = MaxLen
ImgHeight *= ScaleFactor
End If
Dim ThumbImage As System.Drawing.Image = Orginal_Image.GetThumbnailImage(ImgWidth, ImgHeight, Nothing, inp)
ThumbImage.Save(Server.MapPath("~/Images/NewsImage/ResizeImage/") & ImageName)
ThumbImage.Dispose()
End Sub
Shamim832
دوشنبه 16 اسفند 1389, 10:45 صبح
اساتیدکسی نیست کمکم کنه؟؟!!
Slytherin
سه شنبه 17 اسفند 1389, 20:43 عصر
من زیر برنامه شما رو آزمایش کردم، برای من ارور میداد و کار نمی کرد (احتمالا مشکل از نسخه ویژوال استدیوم هست)، در هر صورت کد رو به اون صورتی که مایل بودید تغییر دادم.
Public Class index
Inherits System.Web.UI.Page
Public Sub Resize_Image(ByVal ImageName As String, ByVal MaxLen As Integer)
Dim Orginal_Image As System.Drawing.Image = System.Drawing.Image.FromFile(Server.MapPath("~/Images/") & ImageName)
Dim ImgWidth, ImgHeight As Integer
Dim ScaleFactor As Double
Dim inp As New IntPtr()
ImgWidth = Orginal_Image.Width
ImgHeight = Orginal_Image.Height
If ImgHeight > ImgWidth Then
ScaleFactor = MaxLen / ImgHeight
ImgHeight = MaxLen
ImgWidth *= ScaleFactor
Else
ScaleFactor = MaxLen / ImgWidth
ImgWidth = MaxLen
ImgHeight *= ScaleFactor
End If
Dim ThumbImage As System.Drawing.Image = Orginal_Image.GetThumbnailImage(ImgWidth, ImgHeight, Nothing, inp)
ThumbImage.Save(Server.MapPath("~/Images/") & ImageName)
ThumbImage.Dispose()
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
FileUpload1.SaveAs(Page.Server.MapPath("~/Images/" + FileUpload1.FileName()))
Resize_Image(FileUpload1.FileName(), 50)
End Sub
End Class
Slytherin
سه شنبه 17 اسفند 1389, 20:47 عصر
یادم رفت در پست قبلی بگم:
1.یک FileUpload به برنامه خود اضافه کنید و نام آن را FileUpload1 بگذارید.
2.اگر لازم دونستید بگید تا همین کد ها رو به صورت سورس VS2010 در اختیارتون قرار بدهم.
3.یک پوشه با نام Images در کنار پروژه خود ایجاد کنید.
4.سوالی بود در خدمتم.
Slytherin
سه شنبه 17 اسفند 1389, 20:54 عصر
متوجه شدم برای چی ارور میداد!
در این خط:
ThumbImage.Save(Server.MapPath("~/Images/") & ImageName)
اگر به جای ImageName یک رشته به صورت معمولی بگذارید، برنامه به طور صحیح کار می کند! جالب این است که ImageName هم از نوع String هست!
واقعا نمی دونم مشکل کجاست، سعی می کنم بر طرفش کنم...
Slytherin
سه شنبه 17 اسفند 1389, 21:02 عصر
خب مشکل حل شد! مشکل این بود که عکس اصلی و عکس resize شده در یک مکان قرار داشتند و زمانی که عکس دوم در حال ساخت بود، چون هم نام با عکس اصلی بود، این ارور رخ میداد!
از کد زیر استفاده کنید مشکل حل می شود:
Public Class index
Inherits System.Web.UI.Page
Public Sub Resize_Image(ByVal ImageName As String, ByVal MaxLen As Integer)
Dim Orginal_Image As System.Drawing.Image = System.Drawing.Image.FromFile(Server.MapPath("~/Images/") & ImageName)
Dim ImgWidth, ImgHeight As Integer
Dim ScaleFactor As Double
Dim inp As New IntPtr()
ImgWidth = Orginal_Image.Width
ImgHeight = Orginal_Image.Height
If ImgHeight > ImgWidth Then
ScaleFactor = MaxLen / ImgHeight
ImgHeight = MaxLen
ImgWidth *= ScaleFactor
Else
ScaleFactor = MaxLen / ImgWidth
ImgWidth = MaxLen
ImgHeight *= ScaleFactor
End If
Dim ThumbImage As System.Drawing.Image = Orginal_Image.GetThumbnailImage(ImgWidth, ImgHeight, Nothing, inp)
ThumbImage.Save(Server.MapPath("~/Images/") + "Img" + ImageName)
ThumbImage.Dispose()
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
FileUpload1.SaveAs(Page.Server.MapPath("~/Images/" + FileUpload1.FileName()))
Resize_Image(FileUpload1.FileName(), 100)
End Sub
End Class
نکته1: می توانید پس از انجام فرآیند، عکس اصلی را پاک کنید.
نکته2: می توانید یک پوشه دیگر بسازید و عکس های تغییر سایز یافته را در آن پوشه ذخیره کنید، بدین شکل نیازی به تغییر نام تصویر جدید نخواهد بود.
اگر سوالی بود در خدمتم.
asif1358
چهارشنبه 18 اسفند 1389, 02:31 صبح
سلام، خسته نباشید!
هیچگاه نباید از متد GetThumbnailImage استفاده کرد؛ همان گونه که می دانیم، خیلی از تصاویر همراه خود یک Thumbnail هم دارند (به صورت داده مخفی که در حالت عادی نمی بینیم)؛ بنا بر این متد مذکور از همان Thumbnial استفاده کرده و آن را تغییر سایز می دهد (البته اگر تصویر فاقد Thumbnail باشید، آن را می سازد).
را درست تغییر سایز به صورت دلخواه است؛ به طور مثال:
Private Function ResizeImage(ByVal img As Image, ByVal newSize As Size) As Image
Dim ratio As Double = 0
Dim myThumbWidth As Double = 0
Dim myThumbHeight As Double = 0
Dim x As Integer = 0
Dim y As Integer = 0
Dim bp As Bitmap
If (img.Width / newSize.Width) > (img.Height / newSize.Height) Then
ratio = CDbl(img.Width) / newSize.Width
Else
ratio = CDbl(img.Height) / newSize.Height
End If
myThumbWidth = Math.Ceiling(img.Width / ratio)
myThumbHeight = Math.Ceiling(img.Height / ratio)
Dim thumbSize As New Size(myThumbWidth, myThumbHeight)
bp = New Bitmap(newSize.Width, newSize.Height)
x = (newSize.Width - thumbSize.Width) / 2
y = (newSize.Height - thumbSize.Height)
Dim g As Graphics = Graphics.FromImage(bp)
g.SmoothingMode = SmoothingMode.HighQuality
g.InterpolationMode = InterpolationMode.HighQualityBicubic
g.PixelOffsetMode = PixelOffsetMode.HighQuality
Dim rect As New Rectangle(x, y, thumbSize.Width, thumbSize.Height)
g.DrawImage(img, rect, 0, 0, img.Width, img.Height, GraphicsUnit.Pixel)
Return bp
End Function
asif1358
چهارشنبه 18 اسفند 1389, 02:36 صبح
تکمیل پست قبلی:
استفاده از تابع بالا هم ساده است؛ به طور مثال:
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim mg As Image = Image.FromStream(FileUpload1.FileContent)
Dim s As New Size(75, 75)
Dim mg2 As Image = ResizeImage(mg, s)
mg2.Save(MapPath("~\ff\test2.jpg"))
End Sub
ضمنا یک مقاله در این مورد در سایت خود گذاشته ام شاید بدردتون بخوره:
http://www.fekrenaw.com/TopicDetails.aspx?tid=31
Slytherin
چهارشنبه 18 اسفند 1389, 03:33 صبح
جالب بود، ممنون.
جسارتا روش قبلی چه ایرادی از نظر کارایی دارد؟ (با توجه به اینکه نسبت تغییر سایز رو هم حفظ می کند)
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.