我正在尝试使用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()); } } }
}