تغییر اندازه تصاویر #1
نویسنده: صابر فتح الهی
تاریخ: ۱۳۹۱/۰۹/۱۴ ۱۱:۳۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
namespace PWS
{
public static class Helpers
{
/// <summary>
/// تغییر اندازه تصویر
/// </summary>
/// <param name="imageFile">آرایه بایتی از تصویر مورد نظر</param>
/// <param name="targetSize">اندازه تصویر خروجی</param>
/// <param name="format">فرمت تصویر خروجی</param>
/// <returns></returns>
public static byte[] ResizeImageFile(this byte[] imageFile, Int32 targetSize, ImageFormat format)
{
if (imageFile == null)
throw new Exception("لطفا تصویر اصلی را مشخص نمایید");
//باز کردن تصویر اصلی به عنوان یک جریان
using (var oldImage = Image.FromStream(new MemoryStream(imageFile)))
{
//محاسبه اندازه تصویر خروجی با توجه به اندازه داده شده
var newSize = CalculateDimensions(oldImage.Size, targetSize);
//ایجاد تصویر جدید
using (var newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format24bppRgb))
{
using (var canvas = Graphics.FromImage(newImage))
{
canvas.SmoothingMode = SmoothingMode.AntiAlias;
canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
canvas.PixelOffsetMode = PixelOffsetMode.HighQuality;
//تغییر اندازه تصویر اصلی و قرار دادن آن در تصویر جدید
canvas.DrawImage(oldImage, new Rectangle(new Point(0, 0), newSize));
var m = new MemoryStream();
//ذخیره تصویر جدید با فرمت وارد شده
newImage.Save(m, format);
return m.GetBuffer();
}
}
}
}
/// <summary>
/// محاسبه ابعاد تصویر خروجی
/// </summary>
/// <param name="oldSize">اندازه تصویر اصلی</param>
/// <param name="targetSize">اندازه تصویر خروجی</param>
/// <returns></returns>
private static Size CalculateDimensions(Size oldSize, Int32 targetSize)
{
var newSize = new Size();
if (oldSize.Height > oldSize.Width)
{
newSize.Width = Convert.ToInt32(oldSize.Width * (targetSize / (float)oldSize.Height));
newSize.Height = targetSize;
}
else
{
newSize.Width = targetSize;
newSize.Height = Convert.ToInt32(oldSize.Height * (targetSize / (float)oldSize.Width));
}
return newSize;
}
}
}
byte[] oldImage = FileUploadImage.FileBytes; byte[] target = oldImage.ResizeImageFile(100, ImageFormat.Jpeg);
System.Windows.Media.Imaging.GifBitmapEncoder gEnc = new GifBitmapEncoder();
foreach (System.Drawing.Bitmap bmpImage in images)
{
var bmp = bmpImage.GetHbitmap();
var src = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
bmp,
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
gEnc.Frames.Add(BitmapFrame.Create(src));
DeleteObject(bmp); // recommended, handle memory leak
}
using(FileStream fs = new FileStream(path, FileMode.Create))
{
gEnc.Save(fs);
}