2

画像を16進文字列に変換して、ウェブサーバーに送信する必要があります。このメソッドを使用して、画像をバイト配列に変換しています

         BitmapFactory.Options options = new BitmapFactory.Options();
         options.inSampleSize = 8; 
         Bitmap receipt = BitmapFactory.decodeFile(photo.toString(),options);
         int size = receipt.getRowBytes() * receipt.getHeight();  
         ByteArrayOutputStream stream = new ByteArrayOutputStream();
         receipt.compress(Bitmap.CompressFormat.JPEG, 90, stream);
         receiptbyte = stream.toByteArray();   
         String hexstring = toHex(receiptbyte);  

これを16進数に変換します

   public static String toHex(byte[] bytes) {
    BigInteger bi = new BigInteger(1, bytes); 
    return String.format("%0" + (bytes.length << 1) + "X", bi);
}

次のような出力を生成したい

c11ee236-8f72-4b60-9208-79977d61993f

どうしたらいいかわかりません。エンコードする必要がありますか?

4

2 に答える 2

4

あなたが好きな文字列c11ee236-8f72-4b60-9208-79977d61993fは画像ではありません-それはサーバーに保存されている画像のIDのように見えます。

画像が必要な場合は、IDをサーバーに送信する必要があり、サーバーはIDに属するデータベースに保存されている画像データを送り返します。

Javaでは、このようなランダムIDを自分で簡単に生成できます。

UUID u = UUID.randomUUID();
System.out.println(u.toString());

たとえば、出力:3aa5b32d-c6fb-43c5-80c9-78a1a35aff40

独自のサーバーを構築すると、これを使用して、画像データとこのIDの両方をデータベースに保存できます。

于 2012-05-15T14:54:41.740 に答える
1

あなたはこれを行うことができます

//encode image to base64 string
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.logo);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] imageBytes = baos.toByteArray();
        String imageString = Base64.encodeToString(imageBytes, Base64.DEFAULT);
 
        //decode base64 string to image
        imageBytes = Base64.decode(imageString, Base64.DEFAULT);
        Bitmap decodedImage = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
        image.setImageBitmap(decodedImage);

https://www.thecrazyprogrammer.com/2016/10/android-convert-image-base64-string-base64-string-image.html

于 2020-10-22T14:13:40.643 に答える