BitmapFactory decodeByteArray在格式良好的Base64字符串上返回null

时间:2016-11-28 21:00:14

标签: android base64 bitmapfactory

我到处研究过,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);

返回的位图 null !我知道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 个答案:

答案 0 :(得分:0)

我有完全相同的问题。我没有运行你的base_64_source,但我使用了自己的图像。我所学到的只是一些运行Android 7.0的LG设备有这个问题。这是经过测试的设备。

decodeByteArray正常工作

  • LG G4,Android 6.0
  • LG Nexus 5,Android 6.0.1
    • 这很奇怪,因为@CommonsWare在同一设备上重现了这个问题
  • 华硕Nexus 7,Android 6.0.1
  • Motorola XT1032,Android 5.1

decodeByteArray无法正常工作

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

除了这里,我无法在任何地方找到同样的问题。我的解决方法是,如果decodeByteArray返回为null,我创建新的Bitmap并解码byte [],如https://stackoverflow.com/a/38530866/7303462