我有以下代码在C#中旋转图像:
using (var stream = new FileStream(path, FileMode.Open))
{
using (var image = Image.FromStream(stream))
{
stream.Close();
image.RotateFlip(rotateType);
image.Save(path1, ImageFormat.Png);
image.Dispose();
}
}
如果原始文件大小为700 KiB,则新的旋转文件大小为7+ MiB。
这段代码有什么问题?非常感谢任何帮助。
更新
我尝试将行image.Save(path1, ImageFormat.Png)
更改为image.Save(path1)
和image.Save(path1, image.RawFormt)
但没有任何改进。
答案 0 :(得分:0)
PNG是一种位图文件格式:
因此,你应该把你的形象保存为jpg:
因此,无损PNG格式最适合仍在编辑中的图片 - 而像JPEG这样的有损格式最适合最终分发摄影图像,因为在这种情况下,JPG文件通常较小[...]
来源:wikipedia
尝试通过以下方式在JPEG中保护图像:
image.Save(path, YourClass.GetImageFormat(image));
<强>试验:强>
使用此方法旋转JPG文件,大小保持不变
旋转15.7MiB BMP文件,新大小约为800kiB。
要使用现有文件格式,请使用以下扩展方法:
public static System.Drawing.Imaging.ImageFormat GetImageFormat(System.Drawing.Image img)
{
if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg))
return System.Drawing.Imaging.ImageFormat.Jpeg;
if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Bmp))
return System.Drawing.Imaging.ImageFormat.Bmp;
if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Png))
return System.Drawing.Imaging.ImageFormat.Png;
if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Emf))
return System.Drawing.Imaging.ImageFormat.Emf;
if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Exif))
return System.Drawing.Imaging.ImageFormat.Exif;
if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Gif))
return System.Drawing.Imaging.ImageFormat.Gif;
if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Icon))
return System.Drawing.Imaging.ImageFormat.Icon;
if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.MemoryBmp))
return System.Drawing.Imaging.ImageFormat.MemoryBmp;
if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Tiff))
return System.Drawing.Imaging.ImageFormat.Tiff;
else
return System.Drawing.Imaging.ImageFormat.Wmf;
}
请记住,在操作图像之前必须先查找格式。
否则,图像将被识别为MemoryBmp
。
using (var stream = new FileStream(path, FileMode.Open))
{
using (var image = Image.FromStream(stream))
{
stream.Close();
var format = YourClass.GetImageFormat(image);
image.RotateFlip(RotateFlipType.Rotate180FlipNone);
image.Save(path, format);
image.Dispose();
}
}
答案 1 :(得分:0)
C# - How to change PNG quality or color depth
这家伙的问题与您所看到的相似。