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();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值