web-dev-qa-db-ja.com

javaで画像をbase64文字列に変換する方法は?

重複している可能性がありますが、Base64に送信するために画像をHttp Postに変換する際に問題が発生しています。このコードを試しましたが、エンコードされた文字列が間違っています。

 public static void main(String[] args) {

           File f =  new File("C:/Users/SETU BASAK/Desktop/a.jpg");
             String encodstring = encodeFileToBase64Binary(f);
             System.out.println(encodstring);
       }

       private static String encodeFileToBase64Binary(File file){
            String encodedfile = null;
            try {
                FileInputStream fileInputStreamReader = new FileInputStream(file);
                byte[] bytes = new byte[(int)file.length()];
                fileInputStreamReader.read(bytes);
                encodedfile = Base64.encodeBase64(bytes).toString();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return encodedfile;
        }

出力: [B @ 677327b6

しかし、この同じ画像を多くのオンラインエンコーダーでBase64に変換すると、それらはすべて正しい大きなBase64文字列を与えました。

編集:どのように重複していますか??私の複製であるリンクは、私が望んでいたものを文字列に変換する解決策を与えてくれません。

ここに何が欠けていますか?

19

問題は、バイト配列を返すtoString()への呼び出しのBase64.encodeBase64(bytes)を返すことです。最終的に得られるのは、バイト配列のデフォルトの文字列表現です。これは、得られる出力に対応します。

代わりに、次のことを行う必要があります。

encodedfile = new String(Base64.encodeBase64(bytes), "UTF-8");
24
Lolo

あなたが望むかもしれないと思う:

String encodedFile = Base64.getEncoder().encodeToString(bytes);
8
Joels Elf

これは私のためにそれをしました。出力形式のオプションをBase64.Defaultに変更できます。

// encode base64 from image
ByteArrayOutputStream baos = new ByteArrayOutputStream();
imageBitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
encodedString = Base64.encodeToString(b, Base64.URL_SAFE | Base64.NO_WRAP);
4
MojioMS