BitmapFactory decodeByteArray возвращает значение null для правильно сформированной строки Base64

Исследовав везде, где мог, следующий код в Android не работает:

String base_64_source="iVBORw0KGgoAAAANSUhEUgAAAFAAAAAZCAYAAACmRqkJAAAD8klEQVR42u1ZS2gTQRgOiTbbJO22TZO0NUnTtGmbJs2zoujBgx704APEt+JBPAkqgqCCoifRg+JFD75APKkHPagHCwoqvkBE8a1UxfcLEdRilfr9cScs233MxrT2sD8Mu0lmdma/+eb/vpnYbFZwRWVl5YREIvHQ6/Uus9AoIWpqaubk8/nBnp6e37W1tYssRExGQ0PDZgJQKv0ejydhocK/fMflcrlvsVjstM/nW0UgxuPxGxYyiLq6ugUyZsnLAMpPl8s1PhQK7SbWCYIQpTZtbW1nAOh33PosBG02D3LazOrq6unKgrw3C7+7Ojo6LnR2dl7GvR3FW19fvwSA/gIzJ7KHBBQPdYiiOBVXwcxIMFvZxsbGTaD5CrNtSwy7ytjLHc7u7u6nmUzmI659xEpcnxBDCwA2NzfvJcrSlbUAAKvpu2g0etwIsEAgsIHAwlKYL18C6OSxBoiOYDC4Qz57amkH49lPK0ynztiurq5bxASwZcZwItjS0nJUucTT6fRrYq/8x6KyRCKRQ/Qd1vpJvRegmaF6ra2tx9DmsARcH9G9vb39rEbOmcf6wwTkVaoIyWTyDtXRegbrH/UecNQri4sJh8N7MPE7abmDNGvwnZ/J83qGajab/QJADyBB/pAAPKW3fDDwXuXMSA+3wXAuRWeL1RhIL6wBYhG8VCr10oCBDijhVanuixFKGUOjoqIiTutaTYnAlrl6bZFMV2ooWKFQ3ijQ3ABEt9udIgDg9O9Ky+ONAXiFYOkH/XzCR/F/qZAbA3ivfHmirFFDknXGVmUhx07mU49BDER6BuUUCby3vPYADF/ILIdBTrWD6TmkqORwAEi55B4NBAq6kbTBxGw6JWUapFzq9/vXwTPtampq2so8k5GKkjmVpxAe5hX9h8czhUSEACS/planqqpqMgjyjvWBZX+t7GxlQoIX32LWRoBF5zgER5PEUNKb7OWIiWa2SGyHoAOgAEa/omcjPdymvMrjLkwHFPSgpGa9I9i2KBiU88CMKwbqrAZgSA9AlmLgCi4x0uLzV3IPZRUdEyA4ia3y04gSAZSDx3Kenjr/E4Do6z6BR2JFn8uu2rwgMK+HATxnAygBQDXwVNUZ+WsSL4AaIkJW56JS4ODntg9LDsT1CIdl6Xc6nTFlW14Asb+cbaC2RRCNcpXMBQyAXRktkYSj2IdJf4aJe8R8almDtm5Qqg/S5nmozwH1ySuqHSbSCS21pVMN3v7QZjkYE9RzBnjRtRzLTMBG/zwE7ATux4za4zDKGcr9shUmbQqU7PponuVRGfCF2ySD+9k6PDR7/PD3T5SCyxdFcZqFiLkoyn8JuxMrWP6TTqWt0Ik/4Ouo74qI2SAAAAAASUVORK5C";
byte[] data = Base64.decode(base_64_source, Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

возвращенное растровое изображение является нулевым! Я точно знаю, что источник base64 действителен, если поместить его здесь как html:

<img src="data:image:png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAZCAYAAACmRqkJAAAD8klEQVR42u1ZS2gTQRgOiTbbJO22TZO0NUnTtGmbJs2zoujBgx704APEt+JBPAkqgqCCoifRg+JFD75APKkHPagHCwoqvkBE8a1UxfcLEdRilfr9cScs233MxrT2sD8Mu0lmdma/+eb/vpnYbFZwRWVl5YREIvHQ6/Uus9AoIWpqaubk8/nBnp6e37W1tYssRExGQ0PDZgJQKv0ejydhocK/fMflcrlvsVjstM/nW0UgxuPxGxYyiLq6ugUyZsnLAMpPl8s1PhQK7SbWCYIQpTZtbW1nAOh33PosBG02D3LazOrq6unKgrw3C7+7Ojo6LnR2dl7GvR3FW19fvwSA/gIzJ7KHBBQPdYiiOBVXwcxIMFvZxsbGTaD5CrNtSwy7ytjLHc7u7u6nmUzmI659xEpcnxBDCwA2NzfvJcrSlbUAAKvpu2g0etwIsEAgsIHAwlKYL18C6OSxBoiOYDC4Qz57amkH49lPK0ynztiurq5bxASwZcZwItjS0nJUucTT6fRrYq/8x6KyRCKRQ/Qd1vpJvRegmaF6ra2tx9DmsARcH9G9vb39rEbOmcf6wwTkVaoIyWTyDtXRegbrH/UecNQri4sJh8N7MPE7abmDNGvwnZ/J83qGajab/QJADyBB/pAAPKW3fDDwXuXMSA+3wXAuRWeL1RhIL6wBYhG8VCr10oCBDijhVanuixFKGUOjoqIiTutaTYnAlrl6bZFMV2ooWKFQ3ijQ3ABEt9udIgDg9O9Ky+ONAXiFYOkH/XzCR/F/qZAbA3ivfHmirFFDknXGVmUhx07mU49BDER6BuUUCby3vPYADF/ILIdBTrWD6TmkqORwAEi55B4NBAq6kbTBxGw6JWUapFzq9/vXwTPtampq2so8k5GKkjmVpxAe5hX9h8czhUSEACS/planqqpqMgjyjvWBZX+t7GxlQoIX32LWRoBF5zgER5PEUNKb7OWIiWa2SGyHoAOgAEa/omcjPdymvMrjLkwHFPSgpGa9I9i2KBiU88CMKwbqrAZgSA9AlmLgCi4x0uLzV3IPZRUdEyA4ia3y04gSAZSDx3Kenjr/E4Do6z6BR2JFn8uu2rwgMK+HATxnAygBQDXwVNUZ+WsSL4AaIkJW56JS4ODntg9LDsT1CIdl6Xc6nTFlW14Asb+cbaC2RRCNcpXMBQyAXRktkYSj2IdJf4aJe8R8almDtm5Qqg/S5nmozwH1ySuqHSbSCS21pVMN3v7QZjkYE9RzBnjRtRzLTMBG/zwE7ATux4za4zDKGcr9shUmbQqU7PponuVRGfCF2ySD+9k6PDR7/PD3T5SCyxdFcZqFiLkoyn8JuxMrWP6TTqWt0Ik/4Ouo74qI2SAAAAAASUVORK5C"/>

Вы также можете попробовать это здесь:

http://codebeautify.org/base64-to-image-converter

Любая мысль кто-нибудь? Интересно, если код, лежащий в основе BitmapFactory.decodeByteArray, неисправен.

1 ответ

У меня была точно такая же проблема. Я не запускал ваш base_64_source, но использовал свое собственное изображение. Я узнал, что только некоторые устройства LG, работающие под управлением Android 7.0, имеют эту проблему. Вот проверенные устройства.

DecodeByteArray Working

  • LG G4, Android 6.0
  • LG Nexus 5, Android 6.0.1
    • Это странно, потому что @CommonsWare воспроизвела эту проблему на том же устройстве
  • ASUS Nexus 7, Android 6.0.1
  • Motorola XT1032, Android 5.1

decodeByteArray Не работает

  • LG Nexus 5X, Android 7.0
  • LG V10, Android 7.0

Я не мог найти такую ​​же проблему нигде, кроме как здесь. Мой обходной путь заключается в том, что если возвращение decodeByteArray равно нулю, я создаю новое растровое изображение и декодирую байт [], например /questions/1209543/bitmapfactorydecodebytearray-vsegda-vozvraschaet-nol-sozdannyij-vruchnuyu-massiv-bajtov/1209555#1209555

Другие вопросы по тегам