PNG はビットマップ ファイル形式です。
このため、画像を jpg として安全にする必要があります。
したがって、ロスレス PNG 形式は、まだ編集中の写真に最適です。また、JPEG などの非可逆形式は、写真画像の最終的な配布に最適です。この場合、JPG ファイルは通常小さいため [...]
出典:ウィキペディア
次の方法で 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();
}
}