我正在从URL下载图片,如下所示:
BufferedImage image = null;
URL url = new URL("http://www.ex.com/image/pic.jpg");
image = ImageIO.read(url);
我想将其转换为类似以下十六进制字符串格式:
89504E470D0A1A0A0000000D4948445200000124000001150802000000C6BD0FB3000000017352474200AECE1CE9000000097048597300000EC400000EC401952B0E1B000050B849444154785EED7D0B745CD759EE09E5618742A5C6F1833CB01A6E630587565E2154EE0D579203756DE823764B1ACAEB5A70EBAB2C08588EDB
但我不知道该怎么做。我怎么能这样做?
答案 0 :(得分:3)
您可以执行以下操作的组合:
答案 1 :(得分:3)
将图像读入字节数组:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( image, "jpg", baos );
baos.flush();
byte[] imageInByte = baos.toByteArray();
baos.close();
并将其显示为字符串:
public static String bytesToHex(byte[] bytes) {
final char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] hexChars = new char[bytes.length * 2];
int v;
for ( int j = 0; j < bytes.length; j++ ) {
v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}
答案 2 :(得分:2)
只需以byte[]
方式获取图像,然后使用通常的Java I / O方式,然后将其反馈给DataTypeConverter#printHexBinary()
以获取其中的十六进制字符串。
ByteArrayOutputStream output = new ByteArrayOutputStream();
try (InputStream input = new URL("http://example.com/some.jpg").openStream()) {
byte[] buffer = new byte[10240];
for (int length = 0; (length = input.read(buffer)) > 0;) {
output.write(buffer, 0, length);
}
}
String hex = DatatypeConverter.printHexBinary(output.toByteArray());
// ...
请注意,您不需要整个Java 2D API(ImageIO
et.al。)。这仅在实际打算操纵图像(调整大小,裁剪,倾斜等)时才有用。
答案 3 :(得分:0)
除了其他答案之外,一旦您阅读了图像,您还可以使用现有的javax.xml.bind.DatatypeConverter类将字节数组转换为十六进制字符串。理想情况下使用@BalusC中的方法来节省内存并直接将图像读入字节数组,然后简单地执行
String s = javax.xml.bind.DatatypeConverter.printHexBinary(byteArray);