RGBA 圖片格式轉換 RGB 無損
阿新 • • 發佈:2018-11-26
拿到的圖片是webp格式的,然後系統無法處理。只能使用google code的dwebp工具,把圖片轉成png或者jpg的。
這一步是ok了。
但是轉成的圖片是RGBA的,系統只能處理RGB。。。
報了下面的錯:
java.lang.ArrayIndexOutOfBoundsException: 3 at java.awt.image.ComponentSampleModel.getPixel(ComponentSampleModel.java:750) at java.awt.image.Raster.getPixel(Raster.java:1519) at net.semanticmetadata.lire.imageanalysis.features.global.AutoColorCorrelogram.hsvImage(AutoColorCorrelogram.java:230) at net.semanticmetadata.lire.imageanalysis.features.global.AutoColorCorrelogram.extract(AutoColorCorrelogram.java:242) at net.semanticmetadata.lire.builders.GlobalDocumentBuilder.extractGlobalFeature(GlobalDocumentBuilder.java:199) at net.semanticmetadata.lire.builders.GlobalDocumentBuilder.getGlobalDescriptorFields(GlobalDocumentBuilder.java:217) at net.semanticmetadata.lire.builders.GlobalDocumentBuilder.createDescriptorFields(GlobalDocumentBuilder.java:265) at net.semanticmetadata.lire.builders.GlobalDocumentBuilder.createDocument(GlobalDocumentBuilder.java:287) at net.semanticmetadata.lire.sampleapp.Indexer.main(Indexer.java:121)
還得把RGBA轉成RGB格式。
試了下面的方法:
1,python 的pillow庫,有損;
2,imageMagick(http://www.imagemagick.org/script/index.php),有損;
最後找到了這個:https://github.com/dermotte/LIRE/blob/master/src/main/docs/developer-docs/docs/imageread.md
也就是使用imageJ這個庫
<!-- https://mvnrepository.com/artifact/net.imagej/ij --> <dependency> <groupId>net.imagej</groupId> <artifactId>ij</artifactId> <version>1.49c</version> </dependency>
程式碼:
package com.liyao; import ij.ImagePlus; import ij.process.ImageConverter; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class RGBConvert { public static void main(String args[]){ BufferedImage oldRGBA = openImage("src/main/resources/whatsapp.png"); File outputfile = new File("E:\\saved.png"); try { ImageIO.write(oldRGBA, "png", outputfile); } catch (IOException e) { e.printStackTrace(); } } public static BufferedImage openImage(String path) { ImagePlus imgPlus = new ImagePlus(path); // converting the image to RGB ImageConverter imageConverter = new ImageConverter(imgPlus); imageConverter.convertToRGB(); // returning the BufferedImage instance return imgPlus.getBufferedImage(); } }
親測無損。下面是結果:
這是RGBA 的圖片:
我的cbir系統無法處理。
下面是使用python處理以後的RGB:
程式碼:
import PIL.Image as Image
rgba_image = Image.open('wechat.png')
rgba_image.save('new.png')
這個圖片會報之前的錯。
下面是使用imageJ處理以後的RGB:
沒有報錯。