最近在處理圖片的時候埠戳,使用ImageIO.read()讀取不同格式的圖片(gif、png颗圣、jpg)出現(xiàn)錯誤。具體的錯誤以及解決方法如下所示奔则,這里不細致講解導致錯誤的原因蔽午,網(wǎng)上有很多。
1)讀取GIF圖片抽莱,java.lang.ArrayIndexOutOfBoundsException: 4096
解決:對其進行解碼骄恶。
https://github.com/DhyanB/Open-Imaging
參考鏈接中的readme.md, 只需下載?GifDecoder.java 和 LICENSE 文件到自己項目中,然后使用以下代碼進行讀取返回buff圖像璃岳,其中for循環(huán)是遍歷的動圖中的每一幀img:
public static BufferedImage getDecoderImg(String imgName) throws Exception {
? ? ? ? GifDecoder d = new GifDecoder();
? ? ? ? d.read(imgName);
? ? ? ? int n = d.getFrameCount();
? ? ? ? BufferedImage img = null;
? ? ? ? for (int i = 0; i < n; i++) {
? ? ? ? ? ? img = d.getFrame(i);? // frame i
? ? ? ? ? ? if (img != null) {
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return img;
? ? }
2)讀取png格式圖片出現(xiàn)錯誤:javax.imageio.IIOException: I/O error reading PNG header!?
解決: 針對我的測試示例悔捶,打開圖片可以看到與一般的png圖片不同的是這個圖片是動圖单芜,因此嘗試用1)中的方法進行解碼,不再報錯堂淡。
3)?ImageIO讀jpg的時候出現(xiàn)javax.imageio.IIOException: Unsupported Image Type
解決:https://github.com/haraldk/TwelveMonkeys
參考上述鏈接扒腕,將其安裝信息導入pom文件,并使用以下代碼:
解碼:
4.再使用上述方法完美解決各種錯誤之后皆的,還有一個終極錯誤:maven打包問題蹋盆!
現(xiàn)在jdk一般使用1.7以上,但是上述decoder庫是在1.6jre楞抡,因此打包會出現(xiàn)如下錯誤:
Maven 打包 程序包com.sun.image.codec.jpeg不存在
網(wǎng)上也有相關教程核心如下:
? ? <bootclasspath>${java.home}\lib\rt.jar;${java.home}\lib\jce.jar
但是析藕,還是有些問題,最終采用了相似的方法將rt.jar 以及jce.jar使用maven安裝后用依賴的形式導入,完美解決打包問題:
finished数初!??