PDA

View Full Version : ریسایز تصویر بدون افت کیفیت(کمک فوری لطفا)



hkhani
یک شنبه 04 مرداد 1394, 09:30 صبح
سلام دوستان وقت بخیر
من یه کد ریسایز تصویر دارم که عکس رو تو دو تا اندازه600*250 و 350*260 ذخیره میکنه ولی کیفیت عکس رو به شدت کاهش میده.حتی واسه عکسایی که اندازه واقعیشون بزرگتر از این 2مقداره.کسی راه حلی داره پیشنهاد بده؟چطور میتونم عکس رو بدون افت کیفیت ریسایز کنم؟؟؟؟؟
خیلی فوریه اگه کسی بلده لطفا کمک کنه
با تشکر

System.Drawing.Image image = System.Drawing.Image.FromStream(FileUpload2.Posted File.InputStream);
float imgwidth1 = 600;
float imgheight1 = 250;
System.Drawing.Image img = image.GetThumbnailImage((int)imgwidth1, (int)imgheight1, delegate() { return false; }, (IntPtr)0);
string fileName = Path.Combine(Server.MapPath("~/photos"), FileUpload2.FileName);
if (File.Exists(fileName))
{
Label2.Attributes["style"] = "color:red; font-weight:bold;";
Label2.Text = "عکسی با این نام موجود است.لطفا نام فایل را تغییر دهید";
}
else
{
img.Save(fileName);
float imgWidth = image.PhysicalDimension.Width;
float imgHeight = image.PhysicalDimension.Height;
float imgSize = imgHeight > imgWidth ? imgHeight : imgWidth;
float imgResize = imgSize <= 128 ? (float)1.0 : 128 / imgSize;
imgWidth = 350;
imgHeight = 260;
System.Drawing.Image thumb = image.GetThumbnailImage((int)imgWidth, (int)imgHeight, delegate() { return false; }, (IntPtr)0);
string fileName2 = Path.Combine(
Server.MapPath("~/photos"),
string.Format("{0}_th{1}",
Path.GetFileNameWithoutExtension(FileUpload2.FileN ame),
Path.GetExtension(FileUpload2.FileName)
)
);
thumb.Save(fileName2);

fakhravari
یک شنبه 04 مرداد 1394, 13:51 عصر
بزرگ کردن تصویر خراب میکنه، کم کردن افتی نداره انچنان

xsbehx
یک شنبه 04 مرداد 1394, 14:36 عصر
بطور پیش فرض کیفیت رو می یاره پایین

من یک متدی نوشتم که کار باهاش اسونه
اینجا می زارم ازش استفاده کن
فقط دفعه بعد قبل از ارسال پست یکمی تو سایت بگرد


public void CreateThumbnail(string MainImagePath, float ImageWidthSize, float ImageHeightSize)

{
System.Drawing.Image image = System.Drawing.Image.FromFile(MainImagePath);
float imgWidth = image.PhysicalDimension.Width;
float imgHeight = image.PhysicalDimension.Height;
float imgScale;
//اگر هم عرض و هم ارتفاع عکس وارد شود، تغییر اندازه بر اساس اندازه ورودی خواهد بود
if (ImageHeightSize != 0.0 && ImageWidthSize != 0.0)
{

}
//اگر عرض تصویر صفر باشد و ارتفاع عکس وارد شود، تغییر اندازه بر اساس ارتفاع خواهد بود

//و عرض عکس بصورت خودکار و با حفظ تناسب تغییر خواهد کرد
else if (ImageHeightSize != 0.0 && ImageWidthSize == 0.0)
{
imgScale = imgHeight /ImageHeightSize;
ImageHeightSize = imgHeight / imgScale;
ImageWidthSize = imgWidth / imgScale;
}
//اگر ارتفاع تصویر صفر باشد و عرض عکس وارد شود، تغییر اندازه بر اساس عرض خواهد بود

//و ارتفاع عکس بصورت خودکار و با حفظ تناسب تغییر خواهد کرد
else if (ImageHeightSize == 0.0 && ImageWidthSize != 0.0)
{
imgScale = imgWidth / ImageWidthSize;
ImageHeightSize = imgHeight / imgScale;
ImageWidthSize = imgWidth / imgScale;
}
var newImage = new Bitmap((int)(ImageWidthSize), (int)(ImageHeightSize));
Graphics thumbGraph = Graphics.FromImage(newImage);
thumbGraph.CompositingQuality = CompositingQuality.HighQuality;
thumbGraph.SmoothingMode = SmoothingMode.HighQuality;
thumbGraph.InterpolationMode = InterpolationMode.HighQualityBicubic;
thumbGraph.DrawImage(image, 0, 0, (int)(ImageWidthSize), (int)(ImageHeightSize));
image.Dispose();

//Path.GetDirectoryName(MainImagePath)
//اگر به این متد مسیر یک فایل داده شود، نام فایل و پسوند ان را حذف می کند و باقی را برمی گرداند

//Path.GetFileNameWithoutExtension(MainImagePath)
//اگر به این متد مسیر یک فایل داده شود، تمام مسیر را حذف کرده و فقط نام فایل ان هم بدون پسوند ان را بر می گرداند

//Path.GetExtension(MainImagePath)
//اگر مسیر یک فایل را به این متد بدهیم، پسوند ان فایل را برای ما بر می گرداند
if (Path.GetExtension(MainImagePath) == ".jpg" || Path.GetExtension(MainImagePath) == ".jpeg")
{
newImage.Save(Path.GetDirectoryName(MainImagePath) + "/" + Path.GetFileNameWithoutExtension(MainImagePath) + "_thumb" + Path.GetExtension(MainImagePath), System.Drawing.Imaging.ImageFormat.Jpeg);
}
else if (Path.GetExtension(MainImagePath) == ".png")
{
newImage.Save(Path.GetDirectoryName(MainImagePath) + "/" + Path.GetFileNameWithoutExtension(MainImagePath) + "_thumb" + Path.GetExtension(MainImagePath), System.Drawing.Imaging.ImageFormat.Png);
}
else if (Path.GetExtension(MainImagePath) == ".bmp")
{
newImage.Save(Path.GetDirectoryName(MainImagePath) + "/" + Path.GetFileNameWithoutExtension(MainImagePath) + "_thumb" + Path.GetExtension(MainImagePath), System.Drawing.Imaging.ImageFormat.Bmp);
}

}

hkhani
دوشنبه 05 مرداد 1394, 11:18 صبح
دست شما درد نکنه.خیلی ممنون بابت راهنمایی

مطمئن باشید قبل ازگذاشتن تاپیک سرچ زدم و به نتیجه ای نرسیدم یا مناسب کار من نبودن چیزایی که وجود داشته.تو سایتای خارجی مثلا stackoverflow امکان گذاشتن تاپیک تکراری نیست ولی متاسفانه تو برنامه نویس که سرچ میزنی 100 نفر یه مطلبو گذاشتن و اکثرشون هم به جواب درست نرسیدن یا کلا رها کردن و قیدشو زدن.فک کنم مدیرای سایت باید یه تغییراتی بدن که از تکرار جلوگیری بشه و هم کسی به خودش اجازه خیلی عامیانه صحبت کردن نده(
فقط دفعه بعد قبل از ارسال پست یکمی تو سایت بگرد)
بازم ممنون از وقتی که گذاشتین