我有以下代码来旋转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)
,但没有任何改进。
发布于 2013-10-14 16:38:52
PNG是位图文件格式:
因此,您应该保护您作为jpg的形象:
因此,无损PNG格式最适合于仍然处于编辑阶段的图片--而且有损格式,如JPEG,对于照片图像的最终分发是最好的,因为在这种情况下,JPG文件通常更小.
来源:维基百科
尝试通过以下方式来保护JPEG中的图像:
image.Save(path, YourClass.GetImageFormat(image));
测试:
使用此方法旋转JPG文件,大小保持不变。
旋转一个15.7MiBBMP文件,新的大小是~800 new。
若要使用现有文件格式,请使用此扩展名方法:
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();
}
}
发布于 2013-10-14 16:44:41
这家伙的问题看起来和你看到的一样。
https://stackoverflow.com/questions/19364623
复制相似问题