C#处理缩略图的算法

private byte[] thumbnail(HttpContext context, byte[] bytes)
{
//System.Drawing.Image thumbnail_image = null;
System.Drawing.Image original_image = null;
System.Drawing.Bitmap final_image = null;
System.Drawing.Graphics graphic = null;

Stream s = new MemoryStream(bytes);

MemoryStream ms = null;
// Retrieve the uploaded image
original_image = System.Drawing.Image.FromStream(s);

// Calculate the new width and height
int width = original_image.Width;
int height = original_image.Height;
int target_width = 100;
int target_height = 100;
int new_width, new_height;

float target_ratio = (float)target_width / (float)target_height;
float image_ratio = (float)width / (float)height;

if (target_ratio > image_ratio)
{
new_height = target_height;
new_width = (int)Math.Floor(image_ratio * (float)target_height);
}
else
{
new_height = (int)Math.Floor((float)target_width / image_ratio);
new_width = target_width;
}

new_width = new_width > target_width ? target_width : new_width;
new_height = new_height > target_height ? target_height : new_height;

final_image = new System.Drawing.Bitmap(target_width, target_height);

graphic = System.Drawing.Graphics.FromImage(final_image);

graphic.FillRectangle(new System.Drawing.SolidBrush(System.Drawing.ColorTranslator.FromHtml("#EEFFFF")), new System.Drawing.Rectangle(0, 0, target_width, target_height));

int paste_x = (target_width - new_width) / 2;
int paste_y = (target_height - new_height) / 2;
graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
graphic.DrawImage(original_image, paste_x, paste_y, new_width, new_height);

ms = new MemoryStream();
//final_image.MakeTransparent();
final_image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
s.Close();
s.Dispose();
return ms.GetBuffer();
}

原文地址:https://www.cnblogs.com/yuanxiaoping_21cn_com/p/3047429.html