2010-12-09 40 views
2

我被給了以下代碼,Eclipse將它標記爲(在JPEGImageEncoder行)作爲錯誤(訪問限制)。我改變了Eclipse的選項來編譯代碼,但是我發現這個錯誤意味着這個類(JPEGImageEncoder)可能不會被某個JRE實現(不是Sun/Oracle)實現。創建JPEG:將訪問受限代碼(JPEGImageEncoder)轉換爲「安全」代碼

那麼,什麼應該是沒有訪問限制的代碼,即完全安全的代碼來做同樣的事情(創建一個JPG圖像)?

BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(filename)); 
JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out); 
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(buffImage); 
param.setQuality(0.8f, false); 
encoder.encode(buffImage, param); 

回答

3

也許我誤解了,但如果你希望做一個BufferedImage對象保存爲JPEG格式,你可以做到這一點(從Java 1.4起):

ImageIO.write(bufferedImage,"jpg",file); 

這裏的有更多信息的鏈接:http://download.oracle.com/javase/tutorial/2d/images/saveimage.html

正如您所看到的,它表示JPEG,PNG,GIF,BMP和WBMP將始終受支持。

如果你想設置壓縮/質量,這是多一點工作,但不是太多。假設你有一個BufferedImage和不過outFile:

IIOImage outputImage = new IIOImage(bufferedImage, null, null); 

ImageWriter writer = ImageIO.getImageWritersByFormatName("jpeg").next();   
writer.setOutput(new FileImageOutputStream(outFile)); 
ImageWriteParam writeParam = writer.getDefaultWriteParam(); 
writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
writeParam.setCompressionQuality(.75f); // float between 0 and 1, 1 for max quality. 
writer.write(null, outputImage, writeParam); 

(固定從前面的答案)

+0

我加了一些更多的線路。我也需要設置jpg質量。 ImageIO可以做到這一點嗎? – cdarwin 2010-12-09 22:39:18