我正在开发一个ASP.NET 3.5网络应用程序,我允许我的用户上传jpeg、gif、bmp或png图像.如果上传的图像尺寸大于103 x 32,我想将上传的图像调整为103 x 32.我读过一些博客帖子和文章,也try 过一些代码示例,但似乎没有什么效果.有人成功地做到了吗?
我正在开发一个ASP.NET 3.5网络应用程序,我允许我的用户上传jpeg、gif、bmp或png图像.如果上传的图像尺寸大于103 x 32,我想将上传的图像调整为103 x 32.我读过一些博客帖子和文章,也try 过一些代码示例,但似乎没有什么效果.有人成功地做到了吗?
我前段时间也遇到过同样的问题,我是这样处理的:
private Image RezizeImage(Image img, int maxWidth, int maxHeight)
{
if(img.Height < maxHeight && img.Width < maxWidth) return img;
using (img)
{
Double xRatio = (double)img.Width / maxWidth;
Double yRatio = (double)img.Height / maxHeight;
Double ratio = Math.Max(xRatio, yRatio);
int nnx = (int)Math.Floor(img.Width / ratio);
int nny = (int)Math.Floor(img.Height / ratio);
Bitmap cpy = new Bitmap(nnx, nny, PixelFormat.Format32bppArgb);
using (Graphics gr = Graphics.FromImage(cpy))
{
gr.Clear(Color.Transparent);
// This is said to give best quality when resizing images
gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
gr.DrawImage(img,
new Rectangle(0, 0, nnx, nny),
new Rectangle(0, 0, img.Width, img.Height),
GraphicsUnit.Pixel);
}
return cpy;
}
}
private MemoryStream BytearrayToStream(byte[] arr)
{
return new MemoryStream(arr, 0, arr.Length);
}
private void HandleImageUpload(byte[] binaryImage)
{
Image img = RezizeImage(Image.FromStream(BytearrayToStream(binaryImage)), 103, 32);
img.Save("IMAGELOCATION.png", System.Drawing.Imaging.ImageFormat.Gif);
}
我刚读到这是获得最高质量的方法.