因此,我正在從目錄中讀取文件,確定它們需要旋轉的方式。旋轉然後保存。這部分工作...問題是,它保存文件後,它重新壓縮,我從1.5meg圖像到250k圖像。我需要保持原來的文件大小。我嘗試使用jhead.exe並從命令行調用它,但無法讓我的任何參數正確傳入。這是我的代碼片段來檢測,旋轉和保存。C#在不損失太多質量的情況下旋轉JPG
foreach (FileInfo f in dir.GetFiles("*.jpg"))
{
try
{
string ExportName = "";
Bitmap originalImage = new Bitmap(f.FullName.ToString());
Info inf = new Info(originalImage);
gma.Drawing.ImageInfo.Orientation orientation = gma.Drawing.ImageInfo.Orientation.TopLeft;
try
{
orientation = inf.Orientation;
}
catch
{
orientation = gma.Drawing.ImageInfo.Orientation.TopLeft;
}
originalImage = CheckRotation(originalImage, orientation);
progressBar.Value = progressBar.Value + 1;
originalImage.Save(f.FullName.ToString(), ImageFormat.Jpeg);
Application.DoEvents();
}
private Bitmap CheckRotation(Bitmap inputImage, gma.Drawing.ImageInfo.Orientation orientation)
{
Bitmap rotatedImage = inputImage;
switch (orientation)
{
case gma.Drawing.ImageInfo.Orientation.LeftBottom:
rotatedImage.RotateFlip(RotateFlipType.Rotate90FlipXY);
break;
case gma.Drawing.ImageInfo.Orientation.RightTop:
rotatedImage.RotateFlip(RotateFlipType.Rotate90FlipNone);
break;
default:
break;
}
return rotatedImage;
}
我會建議你使用一個開源工具進行無損旋轉(如jhead.exe出現)。你爲什麼不用你用來運行jhead的代碼打開另一個問題? – Douglas 2012-02-29 19:51:11
您需要使用一個'Save'重載,它需要一個'ImageCodecInfo'和'EncoderParameters' - 參數應該包含高質量,以確保圖像不會顯着降級。 – Oded 2012-02-29 19:51:54
@Oded:你的意思是「不會顯着降低」。將圖像編碼爲JPEG時,即使以「100%」質量進行編碼,實際上也總會出現退化。根據定義,格式是有損的。 – Douglas 2012-02-29 19:53:58