我尝试使用克隆方法裁剪和调整图像大小。它工作但输出尺寸太高。我做错了吗?
var filename = Server.MapPath("1.jpg"); >> 66 kb, width:960px, height:637px
Bitmap img = new Bitmap(filename);
Bitmap original = new Bitmap(filename);
Rectangle cloneRect = new Rectangle(230, 0, 540, img.Height);
PixelFormat format = img.PixelFormat;
Bitmap clone = (Bitmap)original.Clone(cloneRect, format);
var newImg = resizeImage((Image)clone, new Size(210, 210));
newImg.Save(@"f:\2.jpg"); >> output size: 82 kb
private static Image resizeImage(Image imgToResize, Size size)
{
int sourceWidth = imgToResize.Width;
int sourceHeight = imgToResize.Height;
float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;
nPercentW = ((float)size.Width / (float)sourceWidth);
nPercentH = ((float)size.Height / (float)sourceHeight);
if (nPercentH < nPercentW)
nPercent = nPercentH;
else
nPercent = nPercentW;
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
Bitmap b = new Bitmap(destWidth, destHeight);
Graphics g = Graphics.FromImage((Image)b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
g.Dispose();
return (Image)b;
}
答案 0 :(得分:1)
是的,因为你没有指定任何压缩格式,带有指定参数的Image.Save方法(http://msdn.microsoft.com/en-us/library/9t4syfhh(v=vs.110))将文件保存在jpeg中,它将解决问题。
使用此功能保存图像。
/// <summary>
/// Saves the image to specified stream and format.
/// </summary>
/// <param name="image">The image to save.</param>
/// <param name="outputStream">The stream to used.</param>
/// <param name="format">The format of new image.</param>
/// <param name="quality">The quality of the image in percent.</param>
public static void SaveTo(this Image image, Stream outputStream, ImageFormat format, int quality)
{
EncoderParameters encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, quality);
ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
if (format == ImageFormat.Gif)
{
image.Save(outputStream, ImageFormat.Gif);
}
else if (format == ImageFormat.Jpeg)
{
image.Save(outputStream, encoders[1], encoderParameters);
}
else if (format == ImageFormat.Png)
{
image.Save(outputStream, encoders[4], encoderParameters);
}
else if (format == ImageFormat.Bmp)
{
image.Save(outputStream, encoders[0], encoderParameters);
}
else
{
image.Save(outputStream, format);
}
}