简体   繁体   中英

get width and height of webp with java

When I Upload a WEBP file to Controller, I want to get the width and height with java. It returns null when I use the following code:

Image image = ImageIO.read(uploadFile);

When I search on the Internet I find webp-imageio.jar could be used but it's too complex. Is there any easy way to achieve that?

Yes, the Webp Container Sepcs defines that the Webp Extended File Format images which are currently in use has headers in the starting few bits corresponding to the type, file size, is there any alpha, is there any animation, height and width etc.

Though the docs seems to be outdated (it shows that the value of height and width corresponds to index 20 to 25 but rather I found it to be on 24 to 29 indexes).

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;
    }
}

See also: Parsing webp file header in Kotlin to get its height and width, but getting unexpected results

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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