簡體   English   中英

通過ImageMagick流式傳輸的JPEG文件與原始文件的大小不同

[英]JPEG file streamed thru ImageMagick is not the same size as the original file

我正在使用ImageMagick進行一些圖像處理。 我正在嘗試從返回輸入流的服務中流式傳輸文件,並在不讓文件到達硬盤的情況下即時進行圖像處理。

當我使用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的文件,並且可以與查看器一起顯示。

Jpeg是一種壓縮格式,Imagemagick會自動進行一些壓縮。

請參閱: http//www.imagemagick.org/Usage/formats/#jpg

“隨着JPEG質量的降低,圖像的尺寸也會變小。當用戶或源圖像格式文件未設置JPEG質量時,默認的質量設置約為92%,這是一個非常高的品質。“

也許你的輸入Jpeg是無損的 - > 100%

編輯:您可以通過將原始圖片和使用任意圖像處理程序將其保存為jpeg進行測試,方法是將壓縮率設置為92.之后只需比較文件大小。

你應該做romedius建議的(+1)。

另外,只需運行

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

然后比較兩個結果,看看究竟有什么不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM