web-dev-qa-db-ja.com

画像の解像度(DPI)を変更するには?

DPIが72のJPEG画像があります。72dpiを300 dpiに変更したいです。

C#を使用してJPEG画像の解像度を変更するにはどうすればよいですか?

24
ulduz114

この記事 再保存/再圧縮せずに EXIFデータ の変更について説明します(したがって、情報の損失-実際には「トリック」を使用します。 SetResolutionアプローチで必要な直接ライブラリ)。これはクイックGoogle検索で見つかりましたが、保存するEXIFデータを変更するだけで必要なことを指摘したかったのです。

EXIF修正用の.NETライブラリ および別の SO質問 。優れた検索用語を知っていれば、Googleが所有しています。

9
user166390

次のように、ターゲット解像度で新しい画像にビットをコピーする必要があります。

    using (Bitmap bitmap = (Bitmap)Image.FromFile("file.jpg"))
    {
        using (Bitmap newBitmap = new Bitmap(bitmap))
        {
            newBitmap.SetResolution(300, 300);
            newBitmap.Save("file300.jpg", ImageFormat.Jpeg);
        }
    }
56
Simon Mourier

それは、正しい比率で画像の幅と高さを拡大するだけです。すべての画像形式がDPIメタタグをサポートしているわけではありません。サポートしている場合、グラフィックソフトウェアに実行するよう指示しているのは、画像を指定された比率で分割することだけです。

たとえば、300dpiの画像をPhotoshopからJPEGにエクスポートすると、画像表示ソフトウェアで表示すると画像が非常に大きく表示されます。これは、DPI情報がJPEGでサポートされておらず、保存時に破棄されるためです。これは、画像ビューアが画像をどの比率で分割するかを知らず、代わりに画像を1:1の比率で表示することを意味します。

画像をスケーリングするために必要な比率を取得するには、以下のコードを参照してください。覚えておいて、これはwillがPhotoshopの場合と同じように画像を引き伸ばします。基本的に、画像のサイズを4倍にして、画像が伸縮し、アーティファクトが生成される可能性があります。

擬似コード

ratio = 300.0 / 72.0   // 4.167
image.width * ratio
image.height * ratio
5
Soviut