|
分類:[C#]
JPEGファイルを読み込み、ロスレス回転を行い再度JPEGファイルとして保存する処理を実装しております。
本処理の実行時に、特定の環境にて画像ファイル保存時に解像度情報が保存されないという事象が発生します。
※.NetFrameworkは3.5
※特定の端末:Windows7 Windows8
VistaとXPでは発生していない(.NetはSP1適用済み)
本件においての見解・回避策をご教授頂けると助かります。
以下再現可能なソースコードとなります
※ここでは単純化を図るために180回転固定のコードとしておきます
public class JpegLosslessRotator
{
private ImageCodecInfo codecInfo;
private EncoderParameters encParms;
public JpegLosslessRotator()
{
this.codecInfo = GetEncoderInfo("image/jpeg");
this.encParms = new EncoderParameters(1);
this.encParms.Param[0] = new EncoderParameter(Encoder.Transformation, (long)EncoderValue.TransformRotate180);
}
public void Rotate(string srcFilePath, string destFilePath)
{
File.Delete(destFilePath);
using (var fs = File.OpenRead(srcFilePath))
{
using (var pic = Image.FromStream(fs, false, false))
{
pic.Save(destFilePath, this.codecInfo, this.encParms);
}
}
}
private ImageCodecInfo GetEncoderInfo(String mimeType)
{
var encoders = ImageCodecInfo.GetImageEncoders();
for (int j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
{
return encoders[j];
}
}
return null;
}
}
|