2016-11-18 10 views
0

このアプリはbase64をPNGにデコードしますが、サーバーに送信するためにファイルをbase64にエンコードすると、結果のBase64は異なり、画像は生成されません。ここでAndroidのエンコーディングPNG to base64の文字列で無効な結果が生成される

は、元のbase64文字列の先頭である: /9j/4AAQSkZJRgABAQAASABIAAD/4QBMRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAYAAIdp

とここでは、から符号化された後にbase64でのスタートであるとPNGファイル: iVBORw0KGgoAAAANSUhEUgAAD8AAAAvQCAIAAABPl1n3AAAAA3NCSVQICAjb4U/gAAAgAElEQVR4nO

これは、私はコードですBASE64にファイルをエンコードするために使用することは:

BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inDither = true; 
     options.inScaled = false; 
     options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
     options.inDither = false; 

     File file = new File(root +"/saved_images/"+note.imageLocation); 
     if(file.exists()){ 
      // TODO perform some logging or show user feedback 
      try { 
      Bitmap myBitmap = BitmapFactory.decodeFile(root +"/saved_images/"+note.imageLocation, options); 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 


      myBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 
      byte[] byteArray = stream.toByteArray(); 

      JSONObject object =new JSONObject(); 
       object.put("image_type", "image/png"); 
       object.put("image_data", Base64.encodeToString(byteArray, Base64.DEFAULT)); 


       if (note.serverID == -1) { 
        toReturn.put(String.valueOf(i), object); 
       }else{ 
        toReturn.put(String.valueOf(note.serverID), object); 
       } 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      i--; 
     }else{ 
      Log.i("File Not Found", "NoteModel - "+file); 
     } 
+0

'Appはbase64 to PNGをデコードします。 'あなたはそのコードを私たちに示す必要があります。そして、あなたはそのpngがどこに保存されたのかも知らなかった。それをファイルとして保存しましたか? – greenapps

答えて

1

実際にbase64文字列を受け取って中間ビットマップを使用せずにファイルに保存したpngバイトにデコードした場合、そのpngファイルをバイトバッファにロードし、そのバイトバッファをbase64文字列にエンコードするだけですアップロードされます。

イメージを保存するためにビットマップを使用した場合、それは悪い考えでした。

ファイルをアップしてダウンロードするには、クラスBitmapBitmapFactoryを使用しないでください。あなたは別の画像で終わるでしょう。

0

、このコードを試してみてください

public String encodeToBase64(Bitmap image) { 
    Bitmap immagex = Bitmap.createScaledBitmap(image, 350, 350, true); 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    immagex.compress(Bitmap.CompressFormat.PNG, 100, baos); 
    byte[] b = baos.toByteArray(); 
    String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT); 
    Log.e("LOOK", imageEncoded); 
    return "data:image/png;base64," + imageEncoded.replace(" ", "").replace("\n", ""); 
} 

public Bitmap encodeToBitmap(String encodedImage) { 
    encodedImage = encodedImage.substring(encodedImage.indexOf(",") + 1); 
    byte[] decodedString = Base64.decode(encodedImage, Base64.DEFAULT); 
    Bitmap bitmap = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 
    return bitmap; 
} 
+0

あなたの答えをありがとう。これは私が恐れているすべての違いを作っていません:( – jampez77

+0

助けても助けるかもしれない場合、両方のデコードとエンコーディングの方法を試してください –

+0

残念ながら助けていない/ – jampez77

1

私のsolutionを試してください。ビットマップをbase64にエンコードし、base64をビットマップに戻す方法を説明しています。

関連する問題