繁体   English   中英

用java获取webp的宽度和高度

[英]get width and height of webp with java

当我将 WEBP 文件上传到 Controller 时,我想用 java 获取宽度和高度。 当我使用以下代码时,它返回 null:

Image image = ImageIO.read(uploadFile);

我在网上搜索发现webp-imageio.jar可以使用,但它太复杂了。 有什么简单的方法可以实现吗?

是的, Webp Container Sepcs定义了当前使用的Webp 扩展文件格式图像在与类型、文件大小、是否有任何 alpha、是否有任何动画、高度和宽度等对应的起始几位中具有标题。

尽管文档似乎已经过时(它显示高度和宽度的值对应于索引 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;
    }
}

另请参阅:在 Kotlin 中解析 webp 文件头以获取其高度和宽度,但得到意想不到的结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM