ASP.Net MVC图像上传通过缩减或填充resize

用户将能够上传图像。 如果图像大于设定尺寸,我想将其缩小到该尺寸。 显然,由于比率,它不必完全匹配,宽度将是键大小,因此高度可变。

如果图像小于设定的尺寸,我想创建一个具有定义颜色背景的设置尺寸的新图像,然后将上传的图像居中,因此结果是带有paddded颜色的原始图像。

任何代码示例或链接都非常感谢

这是一段代码,我很快就根据宽度调整了大小。 我相信你可以弄清楚如何为Bitmap添加背景颜色。 这不是完整的代码,只是对如何做事的想法。

 public static void ResizeLogo(string originalFilename, string resizeFilename) { Image imgOriginal = Image.FromFile(originalFilename); //pass in whatever value you want for the width (180) Image imgActual = ScaleBySize(imgOriginal, 180); imgActual.Save(resizeFilename); imgActual.Dispose(); } public static Image ScaleBySize(Image imgPhoto, int size) { int logoSize = size; float sourceWidth = imgPhoto.Width; float sourceHeight = imgPhoto.Height; float destHeight = 0; float destWidth = 0; int sourceX = 0; int sourceY = 0; int destX = 0; int destY = 0; // Resize Image to have the height = logoSize/2 or width = logoSize. // Height is greater than width, set Height = logoSize and resize width accordingly if (sourceWidth > (2 * sourceHeight)) { destWidth = logoSize; destHeight = (float)(sourceHeight * logoSize / sourceWidth); } else { int h = logoSize / 2; destHeight = h; destWidth = (float)(sourceWidth * h / sourceHeight); } // Width is greater than height, set Width = logoSize and resize height accordingly Bitmap bmPhoto = new Bitmap((int)destWidth, (int)destHeight, PixelFormat.Format32bppPArgb); bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution); Graphics grPhoto = Graphics.FromImage(bmPhoto); grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic; grPhoto.DrawImage(imgPhoto, new Rectangle(destX, destY, (int)destWidth, (int)destHeight), new Rectangle(sourceX, sourceY, (int)sourceWidth, (int)sourceHeight), GraphicsUnit.Pixel); grPhoto.Dispose(); return bmPhoto; } 

您只需将文件加载到位图对象中即可:

http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.aspx

然后检查对象的宽度。 对于问题的第二部分,我建议使用像ImageMagick这样的工具

http://www.imagemagick.org/script/index.php

准确地调整第一个图像的大小或创建背景图像并将两个图像合并在一起。