我需要在经典java中提取webp图像的宽度和高度
我搜索了图书馆并找到了webp-imageio,但它无法提取图片大小
对于像jpg / png / gif这样的其他格式我使用ImageIO只从标题中提取大小(但不幸的是它无法处理webp)
我如何使用webp执行相同操作?
此致
答案 0 :(得分:1)
该项目webp-imageio-core可能会对您有所帮助。 它集成了Webp转换器本机系统libs(dll / so / dylib)。
下载并导入到您的项目中。示例代码:
public static void main(String args[]) throws IOException {
String inputWebpPath = "test_pic/test.webp";
String outputJpgPath = "test_pic/test_.jpg";
String outputJpegPath = "test_pic/test_.jpeg";
String outputPngPath = "test_pic/test_.png";
// Obtain a WebP ImageReader instance
ImageReader reader = ImageIO.getImageReadersByMIMEType("image/webp").next();
// Configure decoding parameters
WebPReadParam readParam = new WebPReadParam();
readParam.setBypassFiltering(true);
// Configure the input on the ImageReader
reader.setInput(new FileImageInputStream(new File(inputWebpPath)));
// Decode the image
BufferedImage image = reader.read(0, readParam);
ImageIO.write(image, "png", new File(outputPngPath));
ImageIO.write(image, "jpg", new File(outputJpgPath));
ImageIO.write(image, "jpeg", new File(outputJpegPath));
}
然后,您可以使用ImageIO从标题中提取大小。
答案 1 :(得分:0)
Apache Tika使用此metadata extractor library来读取webp的元数据,因此也许它也适合您的需求。
答案 2 :(得分:0)
来自我的answer here:
Webp Container Sepcs定义当前使用的Webp Extended File Format图像在开头几位具有标头,这些标头对应于类型,文件大小,是否存在alpha,是否存在动画,高度和宽度等
尽管文档似乎已经过时了(它表明height和width的值对应于索引20到25,但我发现它在24到29个索引上)。
public class JavaRes {
public static java.awt.Dimension extract(InputStream is) throws IOException {
byte[] data = is.readNBytes(30);
if (new String(Arrays.copyOfRange(data, 0, 4)).equals("RIFF") && data[15] == 'X') {
int width = 1 + get24bit(data, 24);
int height = 1 + get24bit(data, 27);
if ((long) width * height <= 4294967296L) return new Dimension(width, height);
}
return null;
}
private static int get24bit(byte[] data, int index) {
return data[index] & 0xFF | (data[index + 1] & 0xFF) << 8 | (data[index + 2] & 0xFF) << 16;
}
}
另请参阅:Parsing webp file header in Kotlin to get its height and width, but getting unexpected results