Base64 dizesini bir ImageView'de göstermek için bir Bitmap görüntüsüne nasıl dönüştürebilirim?


188

Bir BitMap görüntüsünü temsil eden Base64 dize var.

Android uygulamamdaki bir ImageView üzerinde kullanmak için bu String'i bir BitMap görüntüsüne dönüştürmem gerekiyor

Nasıl yapılır?

Bu görüntüyü base64 String'e dönüştürmek için kullandığım kod:

//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);

Yanıtlar:


351

Temel olarak, diğer bazı yerleşik yöntemleri kullanarak kodunuzu geri alabilirsiniz.

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

23
"data: image / jpg; base64" ilettiğinizden ve yalnızca görüntü baytlarını iletmediğinizden emin olun. Dizeyi bayt olarak değiştirmeyi unutmayın .. photoData = photoData.substring (photoData.indexOf (",") + 1); byte [] decodedString = Base64.decode (photoData.getBytes (), Base64.DEFAULT); Umarım birisi için yardımcı olur.
srinivasan

bayt [] b = Base64.decode (daha önceEncodedImage.getBytes (), Base64.DEFAULT); bitmap = BitmapFactory.decodeByteArray (b, 0, b.length); Bitmap benim durumumda null döndürür. nasıl temel 64 dize bitmap dönüştürmek için?
Rajesh

encodedImage dizesi bir JSON yanıtıysa, Base64 yerine Base64.URL_SAFE kullanın.DEAULT
Chinmoy

7
Verileri kaldırmak için: image ... hem png hem de jpeg için şunu deneyin:String cleanImage = base64Image.replace("data:image/png;base64,", "").replace("data:image/jpeg;base64,","");
Luis Cabrera Benito

Muhteşem İş Gibi Cazibe ... +1
Vasudev Vyas

65

Hala bu soru ile ilgilenen herkese: If: 1-decodeByteArray null değerini döndürür 2-Base64.decode bad-base64 istisnasını atar

İşte çözüm: - API'dan size gönderilen değerin Base64 Encoded olduğunu düşünmelisiniz ve bir Bitmap nesnesine yayınlamak için önce kodu çözülmelidir! -Başlarken, Base64 kodlu String'inize bir göz atın

veriler: Görüntü / jpg; base64

Base64.decode kodu çözemez, bu nedenle kodlanmış Dize'den kaldırılması gerekir:

final String encodedString = "data:image/jpg;base64, ....";                        
final String pureBase64Encoded = encodedString.substring(encodedString.indexOf(",")  + 1);

Artık pureBase64Encoded nesnesinin kodu çözülmeye hazır:

final byte[] decodedBytes = Base64.decode(pureBase64Encoded, Base64.DEFAULT);

Şimdi bunu sadece bir Bitmap Nesnesine dönüştürmek için aşağıdaki satırı kullanın ! :

Bitmap decodedBitmap = BitmapFactory.decodeByteArray (decodedBytes, 0, decodedBytes.length);

Veya büyük Glide kütüphanesini kullanıyorsanız :

Glide.with(CaptchaFragment.this).load(decodedBytes).crossFade().fitCenter().into(mCatpchaImageView);

Bu işi yapmalı! Bu bir gün boşa gitti ve bu çözüme geldi!

Not : Hala kötü-base64 hatası alıyorsanız Base64.URL_SAFE gibi diğer Base64.decode bayraklarını göz önünde bulundurun


Ben json yanıt base64 var, kullanılan Base.64.URL_SAFE kötü-base64 hata var, Bu konu kontrol ve çözüldü, Thumbs up adam ..
livemaker

17

Bu çok eski bir iş parçacığı ama yönetmek için benim geliştirme zamanının çok aldı bu cevabı paylaşmak düşünce NULLdönüşünü BitmapFactory.decodeByteArray()@Anirudh karşılaştığı gibi.

Eğer encodedImagedize bir olan JSONtepkisi, sadece kullanım Base64.URL_SAFEyerineBase64.DEAULT

byte[] decodedString = Base64.decode(encodedImage, Base64.URL_SAFE);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);

1
Base64.URL_SAFE kullanırken bir kötü base64 (IllegalArgumentException) hatası alıyorum. Base64 dizesini bir HTML img etiketi kullanarak doğruladım. Resmi HTML sayfasında görüyorum.
mudit

Merhaba mudit, bad-base64 kural dışı durumunun nasıl düzeltileceğini anladın mı? Eğer öyleyse paylaşmak ister misiniz? Aynı sorunu yaşıyorum. Şimdi iki gündür ve fikirler tükeniyor.
ito

@ito "data: image / jpg; base64" ilettiğinizden emin olun ve yalnızca görüntü baytlarını geçirin. Dizeyi bayt olarak değiştirmeyi unutmayın .. photoData = photoData.substring (photoData.indexOf (", ") + 1); byte [] decodedString = Base64.decode (photoData.getBytes (), Base64.DEFAULT);
srinivasan

Ben de bu bir kelime "Base64.URL_SAFE" için çok mücadele etti ..... Ben json obj olarak getiriliyordu ... Teşekkürler bir ton
Chinmoy

11

Çevrimiçi kontrol etmek için şunları kullanabilirsiniz:

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

Dizeyi bu şekilde resme dönüştürebilirsiniz

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);
    }
}

http://www.thecrazyprogrammer.com/2016/10/android-convert-image-base64-string-base64-string-image.html


2
Web sitemin kodumda veya resim verilerinde bir sorun olup olmadığını anlamak için çok yararlı buldum. Paylaşım için teşekkürler!
Mark O'Sullivan

2

Bu kolay çözümü buldum

Bitmapten Base64'e dönüştürmek için bu yöntemi kullanın.

private String convertBitmapToBase64(Bitmap bitmap) {
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
    byte[] byteArray = byteArrayOutputStream .toByteArray();
    return Base64.encodeToString(byteArray, Base64.DEFAULT);
}

Base64'den bitmap'e dönüştürmek VEYA geri almak.

private Bitmap convertBase64ToBitmap(String b64) {
    byte[] imageAsBytes = Base64.decode(b64.getBytes(), Base64.DEFAULT);
    return BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length);
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.