java - 在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。
任何人都可以提供帮助或有更好的方法来实现这一目标吗?
解决方案
推荐阅读
- vba - 编写脚本时出现活动内容错误
- ruby-on-rails - pluck()/select() 的 Rails 逆
- arrays - 在 VHDL 中使用数组切片
- javascript - 覆盖 npm 包依赖
- javascript - 如何使反应表单元格组件进行通信?
- python - Roots > Trellis > Ansible 2.4 > 错误!Unexpected Exception,这可能是一个错误:No module named 6
- javascript - 对特殊字符使用“Out.print”
- javascript - 使用带有多个计算的 Brython 代码
- java - java.sql.SQLException:从连接器 8.0.11 的服务器收到的未知初始字符集索引“255”
- r - 如何创建仅包含数据集的 R 包?