此方法为网上抄袭而来,并非本人原创。
public
static
void
ResizeImageFile(
string
pathFilename,
byte
[] imageFile,
int
targetSize)
... {
using (System.Drawing.Image oldImage = System.Drawing.Image.FromStream(new MemoryStream(imageFile)))
...{
Size newSize = CalculateDimensions(oldImage.Size, targetSize);
using (Bitmap newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format24bppRgb))
...{
using (Graphics canvas = Graphics.FromImage(newImage))
...{
canvas.SmoothingMode = SmoothingMode.AntiAlias;
canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
canvas.PixelOffsetMode = PixelOffsetMode.HighQuality;
canvas.DrawImage(oldImage, new Rectangle(new Point(0, 0), newSize));
if (newSize.Width >= 400)
...{
canvas.TextRenderingHint = TextRenderingHint.AntiAlias;
string imageCopyright = ConfigurationManager.AppSettings["ImageCopyright"].ToString();
Font font = new Font("Verdana", 10);
SolidBrush solidBrushBlack = new SolidBrush(Color.Black);
SolidBrush solidBrushWhite = new SolidBrush(Color.White);
//左上角
canvas.DrawString(imageCopyright, font, solidBrushBlack, 5, 5);
canvas.DrawString(imageCopyright, font, solidBrushWhite, 6, 6);
//右下角
SizeF sizeF = new SizeF();
sizeF = canvas.MeasureString(imageCopyright, font);
canvas.DrawString(imageCopyright, font, solidBrushWhite, newSize.Width - sizeF.Width - 5, newSize.Height - sizeF.Height);
canvas.DrawString(imageCopyright, font, solidBrushBlack, newSize.Width - sizeF.Width - 6, newSize.Height - sizeF.Height);
}
newImage.Save(pathFilename, ImageFormat.Jpeg);
}
}
}
}
private static Size CalculateDimensions(Size oldSize, int targetSize)
... {
Size newSize = new Size();
if (oldSize.Height > oldSize.Width)
...{
if (oldSize.Height < targetSize)
...{
newSize.Width = oldSize.Width;
newSize.Height = oldSize.Height;
}
else
...{
newSize.Width = (int)(oldSize.Width * ((float)targetSize / (float)oldSize.Height) * 0.75);
newSize.Height = (int)(targetSize * 0.75);
}
}
else
...{
if (oldSize.Width < targetSize)
...{
newSize.Width = oldSize.Width;
newSize.Height = oldSize.Height;
}
else
...{
newSize.Width = targetSize;
newSize.Height = (int)(oldSize.Height * ((float)targetSize / (float)oldSize.Width));
}
}
return newSize;
}
... {
using (System.Drawing.Image oldImage = System.Drawing.Image.FromStream(new MemoryStream(imageFile)))
...{
Size newSize = CalculateDimensions(oldImage.Size, targetSize);
using (Bitmap newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format24bppRgb))
...{
using (Graphics canvas = Graphics.FromImage(newImage))
...{
canvas.SmoothingMode = SmoothingMode.AntiAlias;
canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
canvas.PixelOffsetMode = PixelOffsetMode.HighQuality;
canvas.DrawImage(oldImage, new Rectangle(new Point(0, 0), newSize));
if (newSize.Width >= 400)
...{
canvas.TextRenderingHint = TextRenderingHint.AntiAlias;
string imageCopyright = ConfigurationManager.AppSettings["ImageCopyright"].ToString();
Font font = new Font("Verdana", 10);
SolidBrush solidBrushBlack = new SolidBrush(Color.Black);
SolidBrush solidBrushWhite = new SolidBrush(Color.White);
//左上角
canvas.DrawString(imageCopyright, font, solidBrushBlack, 5, 5);
canvas.DrawString(imageCopyright, font, solidBrushWhite, 6, 6);
//右下角
SizeF sizeF = new SizeF();
sizeF = canvas.MeasureString(imageCopyright, font);
canvas.DrawString(imageCopyright, font, solidBrushWhite, newSize.Width - sizeF.Width - 5, newSize.Height - sizeF.Height);
canvas.DrawString(imageCopyright, font, solidBrushBlack, newSize.Width - sizeF.Width - 6, newSize.Height - sizeF.Height);
}
newImage.Save(pathFilename, ImageFormat.Jpeg);
}
}
}
}
private static Size CalculateDimensions(Size oldSize, int targetSize)
... {
Size newSize = new Size();
if (oldSize.Height > oldSize.Width)
...{
if (oldSize.Height < targetSize)
...{
newSize.Width = oldSize.Width;
newSize.Height = oldSize.Height;
}
else
...{
newSize.Width = (int)(oldSize.Width * ((float)targetSize / (float)oldSize.Height) * 0.75);
newSize.Height = (int)(targetSize * 0.75);
}
}
else
...{
if (oldSize.Width < targetSize)
...{
newSize.Width = oldSize.Width;
newSize.Height = oldSize.Height;
}
else
...{
newSize.Width = targetSize;
newSize.Height = (int)(oldSize.Height * ((float)targetSize / (float)oldSize.Width));
}
}
return newSize;
}