Ответ 1
Вы можете просто восстановить свой код, используя другие встроенные методы.
byte[] decodedString = Base64.decode(encodedImage, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
У меня есть строка Base64, которая представляет изображение BitMap.
Мне нужно снова преобразовать эту строку в образ BitMap, чтобы использовать ее в ImageView в приложении для Android.
Как это сделать?
Это код, который я использую для преобразования изображения в строку base64:
//proceso de transformar la imagen BitMap en un String:
//android:src="c:\logo.png"
Resources r = this.getResources();
Bitmap bm = BitmapFactory.decodeResource(r, R.drawable.logo);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos); //bm is the bitmap object
byte[] b = baos.toByteArray();
//String encodedImage = Base64.encode(b, Base64.DEFAULT);
encodedImage = Base64.encodeBytes(b);
Вы можете просто восстановить свой код, используя другие встроенные методы.
byte[] decodedString = Base64.decode(encodedImage, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
Тем, кто все еще интересуется этим вопросом: Если: 1-decodeByteArray возвращает значение null 2-Base64.decode выбрасывает bad-base64 Exception
Вот решение: -Вы должны учитывать, что значение, отправленное вам из API, является Base64 Encoded и должно быть сначала декодировано, чтобы передать его в объект Bitmap! -Посмотрите на свою кодировку Base64, если она начинается с
данные: изображения /JPG; base64
Base64.decode не сможет декодировать его, поэтому его нужно удалить из кодированной строки:
final String encodedString = "data:image/jpg;base64, ....";
final String pureBase64Encoded = encodedString.substring(encodedString.indexOf(",") + 1);
Теперь объект pureBase64Encoded готов к расшифровке:
final byte[] decodedBytes = Base64.decode(pureBase64Encoded, Base64.DEFAULT);
Теперь просто используйте приведенную ниже строку, чтобы превратить ее в объект Bitmap!
Растровое изображение decodedBitmap = BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);
Или, если вы используете большую библиотеку Glide:
Glide.with(CaptchaFragment.this).load(decodedBytes).crossFade().fitCenter().into(mCatpchaImageView);
Это должно сработать! В этот день он потратил впустую и подошел к этому решению!
Примечание: Если вы по-прежнему получаете ошибку bad-base64, рассмотрите другие флаги Base64.decode, такие как Base64.URL_SAFE и т.д.
Это очень старый поток, но он решил поделиться этим ответом, поскольку мне потребовалось много времени на разработку для NULL
возврата BitmapFactory.decodeByteArray()
, с которым столкнулся @Anirudh.
Если строка encodedImage
является ответом JSON
, просто используйте Base64.URL_SAFE
вместо Base64.DEAULT
byte[] decodedString = Base64.decode(encodedImage, Base64.URL_SAFE);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
Чтобы проверить онлайн, вы можете использовать
http://codebeautify.org/base64-to-image-converter
Вы можете преобразовать строку в изображение таким образом
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.widget.ImageView;
import java.io.ByteArrayOutputStream;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView image =(ImageView)findViewById(R.id.image);
//encode image to base64 string
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.logo);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageBytes = baos.toByteArray();
String imageString = Base64.encodeToString(imageBytes, Base64.DEFAULT);
//decode base64 string to image
imageBytes = Base64.decode(imageString, Base64.DEFAULT);
Bitmap decodedImage = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
image.setImageBitmap(decodedImage);
}
}