首页 > 解决方案 > 在java中将BLOB十六进制字符串转换为JPG的最佳方法是什么?

问题描述

我正在尝试将存储在数据库中作为 BLOB 的 .jpg 的十六进制表示转换回图像。在以下片段中,我正在从包含十六进制字符串的 image.txt 文件中读取十六进制:0xFFD8FFE000104A4649460001010100C800C80000FF...

public static void main(String[] args) throws IOException {
    byte[] encoded = Files.readAllBytes(Paths.get("image.txt"));
    String imageString = new String(encoded).trim();

    ByteArrayInputStream bis = new ByteArrayInputStream(hexStringToByteArray(imageString));
    BufferedImage image = ImageIO.read(bis);

    File outputFile = new File("output.jpg");
    ImageIO.write(image, "jpg", outputFile);
}

public static byte[] hexStringToByteArray(String str) {
    String hexStr = str.substring(2);
    byte[] buf = new byte[hexStr.length() / 2];
    for (int i = 0; i < hexStr.length(); i += 2) {
        if (i != hexStr.length() - 1) {
            buf[i / 2] = (byte) ((Character.digit(str.charAt(i), 16) << 4)
                    + Character.digit(str.charAt(i + 1), 16));
        }
    }

    return buf;
}

对我来说 ImageIO.read 不起作用。它总是返回 null,因此 ImageIO.write 会抛出 IllegalArgumentException,因为 image 不能为 null。

任何人都可以提供帮助或有更好的方法来实现这一目标吗?

标签: javablobjavax.imageio

解决方案


推荐阅读