14

私は大砲のデジタルカメラを持っていて、それを超高品質で写真を撮るように設定しました、そしてそれは3メガのサイズの.jpgファイルを出力します。このようにASP.NETにロードすると(これは、dpi解像度を変更したり、トリミングしたりするのに便利です)

imgPicture = Image.FromFile(Config.WorkDirectory + this.TempPhotoName);
bmpPicture = new Bitmap(imgPicture);

そして、私はそれをこのように再び保存します:

bmpModified.Save(Config.WorkDirectory + this.TempPhotoName,System.Drawing.Imaging.ImageFormat.Jpeg);

わずか700KB程度のサイズのjpgを出力します。品質が低下します。

私も次のように保存してみました:

bmpPicture.Save(Config.WorkDirectory + this.TempPhotoName, codecJpeg, encparams);

ここで、codecJpegは

ImageCodecInfo codecJpeg = this.getEncoderInfo("image/jpeg");


    private ImageCodecInfo getEncoderInfo(string mimeType)
    {
        // Get image codecs for all image formats
        ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();

        // Find the correct image codec
        for (int i = 0; i < codecs.Length; i++)
            if (codecs[i].MimeType == mimeType)
                return codecs[i];
        return null;
    }

およびencparams:

EncoderParameters encparams = new EncoderParameters(1);
encparams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 97L);

このようにしてサイズ(そして品質も疑わしい)は維持されますが、私は手作業で品質を入力しています。

聞きたい:

品質値をハードコーディングせずに、ロードされたのと同じ品質で画像を保存する方法はありますか?

前もって感謝します

4

3 に答える 3

5

品質を設定する方法を知っているように聞こえますが、本当に元の画像から品質を取得する方法を知る必要がありますか?

そもそも品質がメタデータにある場合、それImage.PropertyItemsはあなたの友人だと思います。(JPEG エンコーダー内に品質の標準スケールがあるかどうかはわかりません。)

編集: チェックしたところ、ダウンロードした jpeg に品質のタグがありませんでした。

1 つのオプションは、ファイルが最終的にどのくらいの大きさでほぼ同じ品質になるかを調べ、それを数回保存して、バイナリ検索を実行して最も適切な品質を見つけることです。むずかしいですが、うまくいくかもしれません。

元の品質設定をそのまま維持する方法はないのではないかと密かに疑っていますが、その疑いの根拠はあまりありません...

于 2009-07-02T07:18:15.430 に答える