我有以下代码来拍摄图像并生成缩略图。
如何以编程方式更改质量或压缩以获取更小的文件大小?
Image thumbNail = image.GetThumbnailImage(Width, Height, null, new IntPtr());
我有以下代码来拍摄图像并生成缩略图。
如何以编程方式更改质量或压缩以获取更小的文件大小?
Image thumbNail = image.GetThumbnailImage(Width, Height, null, new IntPtr());
如果您确实需要更好地控制生成的缩略图,最好通过手动生成更小尺寸和不同质量的图像来生成自己的缩略图。GetThumbnailImage 不会给您太多控制权。
请参阅这篇文章了解它是如何完成的。 http://www.switchonthecode.com/tutorials/csharp-tutorial-image-editing-saving-cropping-and-resizing
保存时thumbNail
,Image.Save
您可以通过传递来指定质量EncoderParameter
。请参阅:使用 C# 降低 JPEG 图片质量
EncoderParameter epQuality = new EncoderParameter(
System.Drawing.Imaging.Encoder.Quality,
(int)numQual.Value);
...
newImage.Save(..., iciJpegCodec, epParameters);
您不使用 GetThumbnailImage API:
protected Stream ResizeImage(string source, int width, int height) {
using (System.Drawing.Bitmap bmp = (System.Drawing.Bitmap)System.Drawing.Bitmap.FromFile(source))
using (System.Drawing.Bitmap newBmp = new System.Drawing.Bitmap(width, height))
using (System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(newBmp))
{
graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
graphic.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
graphic.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
graphic.DrawImage(bmp, 0, 0, width, height);
MemoryStream ms = new MemoryStream();
newBmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
return ms;
}
}