HexToImageConverter.java 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package com.zksy.environment.utils;
  2. import io.netty.buffer.ByteBuf;
  3. import javax.imageio.ImageIO;
  4. import java.awt.image.BufferedImage;
  5. import java.io.ByteArrayInputStream;
  6. import java.io.File;
  7. import java.io.IOException;
  8. public class HexToImageConverter {
  9. /**
  10. * 将字节数组保存为图片文件。
  11. *
  12. * @param hexString 16进制字符串
  13. * @param outputFilePath 输出文件路径
  14. * @throws IOException 如果写入文件时发生异常
  15. */
  16. public static File hexStringToImage(String hexString, String outputFilePath) throws IOException {
  17. // 将16进制字符串转换为字节数组
  18. byte[] imageBytes = hexStringToByteArray(hexString);
  19. // 使用ImageIO的read方法从字节输入流中读取图片(注意:这里直接读取可能不工作,因为ImageIO.read期望的是图片格式的文件流)
  20. // 对于直接从字节数组创建图片,我们通常需要知道图片的具体格式,或者使用 ByteArrayInputStream 包装字节数组
  21. BufferedImage image = ImageIO.read(new ByteArrayInputStream(imageBytes));
  22. File file;
  23. if(image != null) {
  24. file = new File(outputFilePath);
  25. // 保存图片到文件
  26. ImageIO.write(image, "PNG", file);
  27. }else{
  28. file = null;
  29. }
  30. return file;
  31. }
  32. /**
  33. * 将16进制字符串转换成字节数组。
  34. *
  35. * @param hexString 16进制字符串
  36. * @return 字节数组
  37. */
  38. public static byte[] hexStringToByteArray(String hexString) {
  39. int len = hexString.length();
  40. byte[] data = new byte[len / 2];
  41. for (int i = 0; i < len; i += 2) {
  42. data[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4)
  43. + Character.digit(hexString.charAt(i+1), 16));
  44. }
  45. return data;
  46. }
  47. /**
  48. * TODO 将字节数组转成16进制
  49. * @param bytes
  50. * @return java.lang.String
  51. * @author Administrator
  52. * @date 2024/8/20 10:51:16
  53. */
  54. static String bytesToHex(byte[] bytes) {
  55. StringBuilder hexBuilder = new StringBuilder();
  56. for (byte b : bytes) {
  57. hexBuilder.append(String.format("%02X", b));
  58. }
  59. return hexBuilder.toString();
  60. }
  61. }