2011-05-18 101 views
3

我使用的是一個通用的格式,所有的應用程序圖像爲PNG.Any上傳的JPG圖像仍然被保存爲PNG使用代碼如下。爪哇JPG到Png

java.awt.image.BufferedImage bufferedImage = ImageIO.read(jpgImagePAth); 

if(!IsExtensionPng(jpgImagePath)){ 
     ImageIO.write(bufferedImage, "png", new File(pptFolder, justNamePng)); 
    } 

但是,這保留了阿爾法即使它是不存在的JPG這樣使得2MB圖片7MB和6MB爲16MB。無論如何要保存png而不保留alpha?

我需要轉換爲PNG的原因是後來當我在圖像上添加文本時,它失去了實際的分辨率。我已經嘗試過無損JPEG,它沒有修復它。

+0

「上傳的圖片」,你將如何使用它們?根據這個答案,我可能會建議一些東西... – 2011-05-18 17:41:54

+0

jpgImagePAth這就是在哪裏jpg圖像已經上傳。 – 2011-05-18 17:44:21

+1

我的意思是,一旦他們上傳並存儲在硬盤上。這是用於桌面應用程序嗎?如果是這樣,請解釋一下。你打算通過互聯網提供服務嗎?我們在談論多少圖片?你會用很多嗎? – 2011-05-18 17:51:13

回答

2

這不是導致文件大小增長的alpha通道,而是文件類型。 JPG使用有損壓縮; PNG是無損壓縮。換句話說,JPG會拋出一些數據來減小文件的大小。這就是爲什麼當保存爲JPG格式時,您需要選擇「質量」級別 - 這決定了拋出的數量。

你怎麼知道你已經得到了alpha通道呢?如果您仍然需要PNG並希望確定要放棄alpha通道,請將圖像類型設置爲BufferedImage.TYPE_RGB,例如

BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_RGB); 

你必須得到的圖形對象與您的新BufferedImage的關聯和JPG格式複製到它,然後寫出來。 This question與您的不太一樣,但您可能會發現有用的示例代碼。

Paul

+0

JPG圖像不透明。所以當用戶上傳JPG時,我不想使用alpha,我認爲 – 2011-05-18 17:42:32

+0

+1是因爲如果存儲了Alpha通道,「BufferedImage」類型似乎是最可能的罪魁禍首。聽起來像OP可能有選擇PNG的好理由。存儲空間很便宜,但存儲未使用的Alpha通道似乎很愚蠢。 – eaj 2011-05-18 17:45:13

+0

是的,我知道JPG圖像不透明。我想知道你爲什麼認爲你寫的PNG包含透明度信息。 – Paul 2011-05-18 17:47:40

1

我不確切知道你是什麼情況。但我應該保留JPEG JPEG。將JPEG轉換爲PNG的唯一好處是浪費硬盤空間。

+1

我想它是在你的答案之後編輯的,但是防止字母周圍的失真僞影是PNG與JPEG相比的明顯優勢。 – Olaf 2011-05-18 17:36:18

+2

@奧拉夫:是的,這是絕對正確的。但這是PNG的一個優勢,而不是從JPEG轉換爲PNG的優勢。 – 2011-05-18 17:40:15