package com.zksy.environment.utils; import io.netty.buffer.ByteBuf; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; public class HexToImageConverter { /** * 将字节数组保存为图片文件。 * * @param hexString 16进制字符串 * @param outputFilePath 输出文件路径 * @throws IOException 如果写入文件时发生异常 */ public static File hexStringToImage(String hexString, String outputFilePath) throws IOException { // 将16进制字符串转换为字节数组 byte[] imageBytes = hexStringToByteArray(hexString); // 使用ImageIO的read方法从字节输入流中读取图片(注意:这里直接读取可能不工作,因为ImageIO.read期望的是图片格式的文件流) // 对于直接从字节数组创建图片,我们通常需要知道图片的具体格式,或者使用 ByteArrayInputStream 包装字节数组 BufferedImage image = ImageIO.read(new ByteArrayInputStream(imageBytes)); File file; if(image != null) { file = new File(outputFilePath); // 保存图片到文件 ImageIO.write(image, "PNG", file); }else{ file = null; } return file; } /** * 将16进制字符串转换成字节数组。 * * @param hexString 16进制字符串 * @return 字节数组 */ public static byte[] hexStringToByteArray(String hexString) { int len = hexString.length(); byte[] data = new byte[len / 2]; for (int i = 0; i < len; i += 2) { data[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4) + Character.digit(hexString.charAt(i+1), 16)); } return data; } /** * TODO 将字节数组转成16进制 * @param bytes * @return java.lang.String * @author Administrator * @date 2024/8/20 10:51:16 */ static String bytesToHex(byte[] bytes) { StringBuilder hexBuilder = new StringBuilder(); for (byte b : bytes) { hexBuilder.append(String.format("%02X", b)); } return hexBuilder.toString(); } }