2011-05-19 64 views

回答

1

JPEG,即使以最高質量設置,總是會有所損失,即使原始圖像數據來自JPEG。

有一些操作,如旋轉/鏡像/裁剪,可以在JPEG上完成無損(使用像jpegtran這樣的工具),但這些是極少數例外。

無論如何,這似乎可以訪問原來的JPG圖像,你不改變它,所以我不明白爲什麼你再壓縮。

如果你真的必須存儲這樣的圖像無損,最好的選擇將使用JPEG2000的無損模式,這使得比使用JPG壓縮的圖像數據等PNG更小的文件大小(儘管它仍然很多大於原始JPG)。例如,對於您的第一個示例圖片:

hAw2d.jpg -> 268,678 bytes (Original) 
hAw2d.jp2 -> 1,021,007 bytes (JPEG 2000, lossless) 
hAw2d.png -> 1,213,392 bytes (PNG) 
+0

這只是一個測試我做了樣品。我在做一些操作後以1.0質量保存jpg。這樣可以減小尺寸 – 2011-05-19 20:53:24

6

不要重繪圖像並保存。相反,只需複製原始字節!


我懷疑你當前的代碼是這樣的:

BufferedImage image = ImageIO.read(new File("my.jpg"); 
ImageIO.write(image, "jpg", new File("copy.jpg")); 

你重複這個圖像將改變一點點(如你看到你總是寬鬆一些質量)每次。如果你只想在JPEG /文件複製在不改變任何東西,你可以做這樣的事情(從這個頁面http://www.exampledepot.com/egs/java.io/CopyFile.html):

void copy(File src, File dst) throws IOException { 
    InputStream in = new FileInputStream(src); 
    OutputStream out = new FileOutputStream(dst); 

    // Transfer bytes from in to out 
    byte[] buf = new byte[1024]; 
    int len; 
    while ((len = in.read(buf)) > 0) { 
     out.write(buf, 0, len); 
    } 
    in.close(); 
    out.close(); 
} 
+0

確實。這是一種無損的jpg格式,但它會顯着增加文件大小。如果你有一個jpg,並希望保持它到底事情是這樣的,不渲染/畫,只需要使用字節的數據。 – GolezTrol 2011-05-19 20:08:48

+0

這只是一個測試我做了樣品。我在做一些操作後以1.0質量保存jpg。這樣可以減小尺寸。 – 2011-05-19 20:52:40