[英]How to convert an image from URL to hex string?
我從URL下載圖像如下:
BufferedImage image = null;
URL url = new URL("http://www.ex.com/image/pic.jpg");
image = ImageIO.read(url);
我想將其轉換為類似以下十六進制字符串格式:
89504E470D0A1A0A0000000D4948445200000124000001150802000000C6BD0FB3000000017352474200AECE1CE9000000097048597300000EC400000EC401952B0E1B000050B849444154785EED7D0B745CD759EE09E5618742A5C6F1833CB01A6E630587565E2154EE0D579203756DE823764B1ACAEB5A70EBAB2C08588EDB
但我不知道該怎么做。 我怎樣才能做到這一點?
您可以執行以下操作的組合:
要將圖像讀入字節數組:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( image, "jpg", baos );
baos.flush();
byte[] imageInByte = baos.toByteArray();
baos.close();
並將其顯示為String:
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);
}
只需以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.)。 這僅在您實際打算操縱圖像(調整大小,裁剪,傾斜等)時才有用。
除了其他答案之外,一旦您閱讀了圖像,您還可以使用現有的javax.xml.bind.DatatypeConverter類將字節數組轉換為十六進制字符串。 理想情況下使用@BalusC的方法來節省內存並直接將圖像讀入字節數組,然后簡單地做
String s = javax.xml.bind.DatatypeConverter.printHexBinary(byteArray);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.