我正在尝试使用MVC3的Web
Image助手创建缩略图.
原始图像是具有透明背景的.png.当我尝试使用以下内容调整大小时:
var image = blob.DownloadByteArray(); new WebImage(image) .Resize(50,50) .Write();
解决方法
上面这个答案很棒,但我做了一些微调并实现了图像的“保持比例”,这样我们就不会得到拉伸的图像了.
using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Web.Helpers; public static class ResizePng { private static IDictionary<string,ImageFormat> _transparencyFormats = new Dictionary<string,ImageFormat>(StringComparer.OrdinalIgnoreCase) { { "png",ImageFormat.Png },{ "gif",ImageFormat.Gif } }; public static WebImage ResizePreserveTransparency(this WebImage image,int width,int height) { ImageFormat format = null; if (!_transparencyFormats.TryGetValue(image.ImageFormat,out format)) { return image.Resize(width,height); } //keep ratio ************************************* double ratio = (double)image.Width / image.Height; double desiredratio = (double)width / height; if (ratio > desiredratio) { height = Convert.ToInt32(width / ratio); } if (ratio < desiredratio) { width = Convert.ToInt32(height * ratio); } //************************************************ using (Image resizedImage = new Bitmap(width,height)) { using (Bitmap source = new Bitmap(new MemoryStream(image.GetBytes()))) { using (Graphics g = Graphics.FromImage(resizedImage)) { g.SmoothingMode = System.Drawing.drawing2d.SmoothingMode.AntiAlias; g.InterpolationMode = System.Drawing.drawing2d.InterpolationMode.HighQualityBicubic; g.DrawImage(source,width,height); } } using (MemoryStream ms = new MemoryStream()) { resizedImage.Save(ms,format); return new WebImage(ms.ToArray()); } } }
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。