簡體   English   中英

如何將圖像從URL轉換為十六進制字符串?

[英]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

但我不知道該怎么做。 我怎樣才能做到這一點?

您可以執行以下操作的組合:

  1. 獲取圖像的字節數組: Java-將bufferedimage轉換為byte []而不寫入磁盤
  2. 獲取字節數組的十六進制字符串: 如何在Java中將字節數組轉換為十六進制字符串?

要將圖像讀入字節數組:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM