我有一个图像上传表单,它存储两种尺寸的图像:大图像和缩略图图像。
对于缩略图图像,我试图从中心裁剪图像并将大小重新调整为:30px x 30px。
这是我的代码:
private static Bitmap ResizeImage(MemoryStream uploadStream, int maxWidth, int maxHeight)
{
Image img = Image.FromStream(uploadStream);
double ratioX = (double)maxWidth / img.Width;
double ratioY = (double)maxHeight / img.Height;
double ratio = Math.Max(ratioX, ratioY);
int newWidth = (int)(img.Width * ratio);
int newHeight = (int)(img.Height * ratio);
Bitmap resizedBitmap = new Bitmap(newWidth, newHeight);
Graphics.FromImage(resizedBitmap).DrawImage(img, 0, 0, newWidth, newHeight);
img.Dispose();
return resizedBitmap;
}
private static Bitmap CropImageToCentre(MemoryStream uploadStream, int width, int height)
{
Image img = Image.FromStream(uploadStream);
Bitmap resizedBitmap = new Bitmap(img);
int StartX = 0, StartY = 0;
int EndX = img.Width, EndY = img.Height;
bool Crop = false;
if (img.Width > width)
{
int MidX = img.Width / 2;
StartX = MidX - (width / 2);
EndX = MidX + (width / 2);
Crop = true;
}
if (img.Width > height)
{
int MidY = img.Height / 2;
StartY = MidY - (height / 2);
EndY = MidY + (height / 2);
Crop = true;
}
if (Crop)
{
Size imgSize = new Size(width, height);
resizedBitmap = new Bitmap(img, imgSize);
}
img.Dispose();
return resizedBitmap;
}
public static Bitmap ResizeThumbnail(MemoryStream ms)
{
int thumbWidth = int.Parse(ConfigurationManager.AppSettings["thumbwidth"]);
int thumbHeight = int.Parse(ConfigurationManager.AppSettings["thumbheight"]);
return CropImageToCentre(BitmapToMemoryStream(ResizeImage(ms, thumbWidth, thumbHeight)), thumbWidth, thumbHeight);
}
public static Bitmap ResizeLargeImage(MemoryStream ms)
{
int width = int.Parse(ConfigurationManager.AppSettings["largewidth"]);
int height = int.Parse(ConfigurationManager.AppSettings["largeheight"]);
return ResizeImage(ms, width, height);
}
private static MemoryStream BitmapToMemoryStream(Bitmap bm)
{
MemoryStream memoryStream = new MemoryStream();
bm.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
return memoryStream;
}
我遇到的问题是在调用该ResizeThumbnail()
方法时,图像没有被裁剪或调整为 30px 的高度和宽度。