Mam serwer z kilkoma zdjęciami od 1,5 kb do 9 Mb. Zdjęcia z komputera, tabletu i telefonu. Sever koduje je na ciągi Base64, a następnie wysyła je do klienta Android. Jedno zdjęcie o wartości 300 kb zwraca wartość null podczas dekodowania w BitmapFactory.decodeByteArray ... Jednak jest to poprawny obraz i dobre odkodowanie w dekoderze internetowym. ?!Android BitmapFactory wraca null na dekodowanej tablicy bajtowej Base64
byte[] decodedString = Base64.decode(image64, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, ecodedString.length);
przez 2 dni nie mogę znaleźć odpowiedzi (
Wszelkie pomysły Dzięki
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;
}
I logcat
dobry wizerunek:
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]
zły obraz:
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
co odróżnić obrazy, z wyjątkiem ich wielkości? – goto
Mój przyjacielu, możesz dać nam swój obraz, żeby go wypróbować? –
Wszystkie zdjęcia jpg. Problem z tabletu z Androidem –