3

ImageMagick を使用して画像操作を行っています。入力ストリームを返すサービスからファイルをストリーミングし、ファイルを HDD にヒットさせずにオンザフライで画像操作を実行しようとしています。

InputStream、OutputStream、FileOutputStream クラスを使用して入力ストリームをファイルに変換すると、結果のファイル サイズは、サービスに保存されているファイルと同じになります (初期ファイル サイズは 9 MB)。これで問題ありません。ImageMagick を介して入力ストリームを実行すると、何も操作していなくても、結果のファイルはかなり小さくなります (2 MB)。何が間違っているのか、または知らないうちに ImageMagick がファイルに対して何かを行っているのかどうかはわかりません。これが私のコードのスニペットです:

IMOperation op = new IMOperation();
ConvertCmd convert = new ConvertCmd();

InputStream is = s.getFileFromBucket(BUCKET, filename);
op.addImage("-");  // read from stdin
op.addImage(outfile);
Pipe pipeIn = new Pipe (is,null);
convert.setInputProvider(pipeIn);
convert.run(op);
is.close();

そのため、ファイルはまだ何もしていないので、入ってくるのと同じサイズになると予想していましたが、ファイルは小さくなっています。

ストリーミング中にサービスが途中で停止した可能性があると誰かが示唆していたため、ファイルが非常に小さいのです。ImageMagick を使用して実行したすべてのテストで、出力ファイルのサイズが同じ (2 MB) であるため、これは当てはまらないと思います。また、ビューアを使用して結果のファイルを見ると、問題なくファイルが表示されます。最後に、入力ストリームをファイルに変換すると、常に 9 MB のファイルになり、ビューアで問題なく表示されます。

4

2 に答える 2

3

Jpegは圧縮形式であり、Imagemagickはいくつかの圧縮を自動的に実行しています。

参照: http: //www.imagemagick.org/Usage/formats/#jpg

「JPEG品質が低くなると、画像のサイズも小さくなります。ユーザーまたはソース画像形式ファイルからJPEG品質が設定されていない場合のデフォルトの品質設定は、約92%です。非常に高品質です。」

たぶんあなたの入力Jpegはロスレスです->100%

編集:元の写真を撮り、圧縮率を92に設定することで、任意の画像処理プログラムでjpegとして保存することで、これをテストできます。後でファイルサイズを比較するだけです。

于 2012-09-27T01:18:08.200 に答える
2

ロメディウスが提案したことを行う必要があります(+1)。

さらに、実行するだけです

identify -verbose input.stream  > input.txt
identify -verbose output.stream > output.txt

次に、2 つの結果を比較して、違いを正確に確認します。

于 2012-09-27T05:38:52.980 に答える