私のソース画像は2288pxx1712pxと816kbです。1024 x 768のサムネイルを作成すると、ファイルサイズは高解像度ソースの2倍以上になります(使用する方法に応じて1.13mb〜1.8mb)。
作成されたソース画像とサムネイルは.jpgです
299 x 224のサムネイルを作成する場合でも180kbですが、GIMPで手動でサムネイルを作成する場合は14kbです。
見栄えの良い画像が必要なので、サイズの品質に妥協することはできません。
1.13MBのファイルを作成したImage.GetThumbnailImageを試しましたが、予期しない結果が生じる可能性があることを読みました。
ほとんどの記事はこの記事のようなコードを書くと言っています:http: //www.codeproject.com/KB/GDI-plus/imageresize.aspx
それは私に1.83mbのサムネイルを与えます。
デスクトップアプリケーションで同じことを行う場合と比較して、より大きなファイルサイズを期待する必要がありますか?
24ビットではなく16ビットを試し、「高品質」の値をコメントアウトしましたが、それでも1MB未満では取得できません。何か案は?
Bitmap bmPhoto = new Bitmap(destWidth, destHeight,PixelFormat.Format24bppRgb);
bmPhoto.SetResolution(image.HorizontalResolution,image.VerticalResolution);
Graphics grPhoto = Graphics.FromImage(bmPhoto);
grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;
grPhoto.SmoothingMode = SmoothingMode.HighQuality;
grPhoto.PixelOffsetMode = PixelOffsetMode.HighQuality;
grPhoto.CompositingQuality = CompositingQuality.HighQuality;
答えのために編集
私は圧縮が不足していました。私の1024サムネイルは112kbになりました。
Encoder qualityEncoder = Encoder.Quality;
//80L is the compression percentage
EncoderParameter ratio = new EncoderParameter(qualityEncoder, 80L);
// Add the quality parameter to the list
EncoderParameters codecParams = new EncoderParameters(1);
codecParams.Param[0] = ratio;
ImageCodecInfo jpegCodecInfo = GetEncoderInfo("image/jpeg");
bmPhoto.Save(Path.Combine(filepath, RenameImage(filename, appendName, replaceWholeString)), jpegCodecInfo, codecParams);
ImageCodecInfo GetEncoderInfo(string mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for(j = 0; j < encoders.Length; ++j)
{
if(encoders[j].MimeType.ToUpper() == mimeType.ToUpper())
return encoders[j];
}
return null;
}