2016-07-18 11 views
-1

私はバックエンドによって私に送られてきたbase64 String Imageの変換に問題があります。カメラbase64イメージをビットマップに変換できません

バックエンドがデータを送信する方法です。

final ByteArrayOutputStream os = new ByteArrayOutputStream(); 
    try { 
     ImageIO.write(img, formatName, Base64.getEncoder().wrap(os)); 
     return os.toString(StandardCharsets.ISO_8859_1.name()); 
    } catch (final IOException ioe) { 
     throw new UncheckedIOException(ioe); 
    } 

これは変換方法です。

final byte[] data = Base64.decode(base64, Base64.DEFAULT); 

      return BitmapFactory.decodeByteArray(data, 0, data.length); 

結果は常にnullです。どんな助けも高く評価されます。

EDIT:

は、これらのバックエンド・コードです。

 @Override 
     public BufferedImage base64ToImage(String base64Image) throws IOException { 

      byte[] imageBytes = Base64.getDecoder().decode(base64Image); 
      BufferedImage img = ImageIO.read(new ByteArrayInputStream(imageBytes)); 

      return img; 
     } 
     public static String imgToBase64String(final RenderedImage img, final String formatName) { 
      final ByteArrayOutputStream os = new ByteArrayOutputStream(); 
      try { 
       ImageIO.write(img, formatName, Base64.getEncoder().wrap(os)); 
       return os.toString(); 
      } catch (final IOException ioe) { 
       throw new UncheckedIOException(ioe); 
      } 
     } 

そしてこれは、バックエンドへのBase64画像列を送信する前に私たちの変換ツールです。

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); 

     return Base64.encodeToString(baos.toByteArray(), Base64.NO_WRAP); 
+0

で復号化が行われているdata' 'の長さは何ですか? @EricB。 –

+0

。 372255、TIA – Bryan

+0

私の場合、画像サイズが1 MBを超えると、エラーが発生したり、何もしないことがあります。あなたはこのリンクを試すことができます:https://www.simplifiedcoding.net/android-volley-tutorial-to-upload-image-to-server/ ---これがあなたを助けてくれることを願っています。 –

答えて

0

ウルbase64でエンコードされた文字列がdata:image/jpg;base64,で始まらないことを確認します。そうであれば削除します。この場合、Base64.decodeはデコードできません。 uはencodedString.substring(encodedString.indexOf(",") + 1);を使用して削除できます。これが問題を解決するかどうか私に教えてください。

+0

それはしません。私はデバッグモードで動作していますが、それがあれば質問の部分に追加するべきです。 – Bryan

+0

私はそれをデコードしようとすることができるようにここにエンコードされた文字列を投稿することができます... –

+0

全体の文字列を投稿することはできません。 – Bryan

0

 ImageView driverImage = (ImageView) driverReportView.findViewById(R.id.imgViewDriverImage); 
     try { 
      byte [] encodeByte = Base64.decode(driverImageString.replace("\'/", "/"), Base64.DEFAULT); 
      Bitmap bitmap= BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length); 
      if (bitmap != null) 
       driverImage.setImageBitmap(bitmap); 

     }catch (Exception ex){ 
      Log.e(TAG,"Error to display driver info "+ex.toString()); 
     } 

どこ

driverImageString、これを試してみてくださいあなたの画像列が

+0

まだ動作しません。 – Bryan

+0

エラーが生じますか? –

+0

いいえ、この行ではnullになります。 "Bitmap bitmap = BitmapFactory.decodeByteArray(encodeByte、0、encodeByte.length);" – Bryan

関連する問題