単位を指定します - このオプションを省略したときに問題が発生したことを覚えているようです (ただし、DPI がデフォルトである必要があります)。例:
convert -units PixelsPerInch input.png -density 300 output.png
GIMP が解像度を読み取るために使用する埋め込みデータ フィールドを知っていますか? ImageMagick で使用される標準のものをオーバーライドする独自のフィールドがありますか?たとえば、Photoshop は Photoshop:XResolution
を使用します。 と Photoshop:YResolution
したがって、Photoshop が密度設定を認識できるようにこれらを設定する必要があります (ImageMagick ではこれを行うことができません。ExifTool を使用します)。
Exiftool を使用して解像度を読み取ることができることに注意してください。例:Exiftool '-*resolution*' c.jpg
表示される場合があります
解像度 単位 :インチX 解像度 :300Y 解像度 :300
Exiftool はパラメーターを設定することもできますが、man ページ Image::ExifTool::TagNames
に記載されているように の場合、Exiftool はエクストラ タグ XResolution と YResolution を書き込むことができません。
ImageMagick に解像度変更オプションがあるかどうかはわかりませんが、ない場合は驚くでしょう。また、このようなタスクを自動化する GIMP スクリプトを作成するのは簡単で、小さなプログラムで解像度を変更することも可能です。たとえば、以下は C プログラムです (gcc setRes.c -O3 -Wall -o setRes
でコンパイル可能) ) は、jpeg ファイルの最初の数バイトを読み取り、解像度を 300 に変更して、それらを書き換えます。示されているプログラムは、x86 などのリトル エンディアン マシン用の定数を使用します。ビッグエンディアンのマシンで実行すると、Error: xyz may be not a .jpg file
のようなメッセージで終了するはずです 、たとえ xyz であっても jpeg ファイル。 pdflatex
経由で結果の画像をテストしていないことに注意してください; tex SE に質問を投稿する価値があるでしょう。
/* jiw -- 24 Sep 2012 -- Re: set resolution in a jpg -- Offered without
warranty under GPL v3 terms as at http://www.gnu.org/licenses/gpl.html
*/
#include <stdlib.h>
#include <stdio.h>
void errorExit(char *msg, char *par, int fe) {
fprintf (stderr, "\n%3d Error: %s %s\n", fe, msg, par);
exit (1);
}
// Note, hex constants are byte-reversed on little vs big endian machines
enum { JF=0x464a, IF=0x4649, L300=0x2c01, B300=0x012c, NEWRES=L300};
int main(int argc, char *argv[]) {
FILE *fi;
short int buf[9];
int r, L=sizeof buf;
if (argc<2) errorExit(argv[0], "requires a .jpg file name", 0);
fi = fopen(argv[1], "r+b");
if(!fi) errorExit("open failed for", argv[1], ferror(fi));
r = fread(buf, 1, L, fi);
if (r != L) errorExit("read failed for", argv[1], ferror(fi));
if (buf[3] != JF || buf[4] != IF) // Check JFIF signature
errorExit(argv[1], "may be not a .jpg file", 0);
buf[7] = buf[8] = NEWRES;
fseek(fi, 0, SEEK_SET);
r = fwrite(buf, 1, L, fi);
if (r != L) errorExit("write failed for", argv[1], ferror(fi));
return 0;
}
改宗者を説得する方法がわかりませんでした メタデータのみを追加し、[モノクロ] ビットマップを再エンコードしない。ファイルを 50% 以上拡大していました。
pngcrush を発見しました (ImageMagick ツールではありません) は、密度メタデータを追加することもできます。このコマンド ラインは 600dpi をマークし、他の最適化を許可して、ファイル サイズを ~10% 削減しました:
pngcrush -res 600 in.png out.png