2016-06-28 15 views
5

1,5 kb ila 9 Mb arasında çeşitli fotoğraflar içeren bir sunucum var. PC, tablet ve telefonlardan fotoğraflar. Sesi onları Base64 dizelerine kodlar ve sonra onları bir Android istemcisine gönderir. BitmapFactory.decodeByteArray öğesinde kod çözülürken bir 300 kb fotoğraf döndürme sıfır ... Ancak geçerli bir resim ve çevrimiçi şifre çözücüde iyi çözülür. ?! Ben yanıt bulamıyor 2 gün boyuncaAndroid BitmapFactory üzerinde dönen null Base64 kodu çözülmüş bayt dizisi

byte[] decodedString = Base64.decode(image64, Base64.DEFAULT); 
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, ecodedString.length); 

(

Herhangi bir fikir sayesinde

PS

private boolean decodeImage64(String uid, String image64, String name) { 
    Bitmap decodedByte; 
    boolean result = false; 
    if (image64 != null && !image64.isEmpty()) { 

     try { 
      Log.e(TAG, "decodeImage64: image64.getBytes().length = " + image64.getBytes().length); 
      byte[] decodedString = Base64.decode(image64, Base64.DEFAULT); 
      Log.e(TAG, "decodeImage64: decodedString = " + decodedString + " , decodedString.length = " + decodedString.length); 
      decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 
      Log.e(TAG, "decodeImage64: decodedByte = " + decodedByte); 

      if (decodedByte != null) { 
       FileOutputStream out = null; 
       try { 
        out = new FileOutputStream(getImageFolderName() + "/" + uid + ".png"); 
        decodedByte.compress(Bitmap.CompressFormat.PNG, 100, out); 
        decodedByte.recycle(); 
        out.close(); 

       } catch (Exception e) { 
        Log.e(TAG, Log.getStackTraceString(e)); 
       } finally { 
        try { 
         if (out != null) { 
          out.close(); 
         } 
         if (decodedByte != null){ 
          decodedByte.recycle(); 
         } 
        } catch (IOException e) { 
         Log.e(TAG, Log.getStackTraceString(e)); 
        } 
       } 
       result = true; 
      }else { 
       Log.e(TAG, " !!!!!!!!!!!!!!!!!!!!!!! decodeImage64: decodedByte = null " + name); 
      } 
     }catch (Exception e){ 
      Log.e(TAG, Log.getStackTraceString(e)); 
     } 
    } else { 
     Log.e(TAG, "decodeImage64: image = null " + name); 
    } 
    return result; 
} 

Ve logcat

iyi resim:

06-29 02:33:57.465 18197-18584/cps.agrovisio E/myLogs: ------------------------- doInBackground: Good photo 
06-29 02:34:13.993 18197-18584/cps.agrovisio E/myLogs: decodeImage64: image64.getBytes().length = 2264744 
06-29 02:34:14.085 18197-18584/cps.agrovisio E/myLogs: decodeImage64: decodedString = [[email protected] , decodedString.length = 1676499 
06-29 02:34:14.635 18197-18584/cps.agrovisio E/myLogs: decodeImage64: decodedByte = [email protected] 

kötü resim:

06-29 02:33:56.041 18197-18584/сps.agrovisio E/myLogs: ------------------------- doInBackground: Bad photo 
06-29 02:33:57.177 18197-18584/cps.agrovisio E/myLogs: decodeImage64: image64.getBytes().length = 372570 
06-29 02:33:57.194 18197-18584/cps.agrovisio E/myLogs: decodeImage64: decodedString = [[email protected] , decodedString.length = 275799 
06-29 02:33:57.245 18197-18584/cps.agrovisio E/myLogs: decodeImage64: decodedByte = null 
+0

Boyutları dışında resimleri ne farklılaştırır? – goto

+0

Arkadaşım bunu denemek için bize imajını verebilir misin? –

+0

Tüm Resimler jpg. Android Tablet sorunu –

cevap

0

Bu aradığınız cevabı olmayabilir ama bir çerçeve kullanarak kabul var? Picasso'yu kullanıyorum ve şu kadar kolay: Picasso.with (context) .load ("http://i.imgur.com/DvpvklR.png") .into (imageView);

http://square.github.io/picasso/

+0

soru düzenledim Teşekkürler! Ama Picasso'yu kullanamam. Json'da birkaç tane parametrim var, baz64'deki görüntülerden biri. –

0

Dilim image64 gelen kısım data:image/jpg;base64,. Sadece kodlanmış dizgeye sahip ol.

Bunun için alt dizgi yöntemini kullanabilirsiniz, işe yarayacaktır.