एक Base64 स्ट्रिंग को एक इमेज व्यू में दिखाने के लिए बिटमैप इमेज में कैसे कन्वर्ट करें?


187

मेरे पास एक बेस 64 स्ट्रिंग है जो एक बिटमैप छवि का प्रतिनिधित्व करता है।

मुझे अपने एंड्रॉइड ऐप में एक ImageView पर इसका उपयोग करने के लिए उस स्ट्रिंग को फिर से BitMap छवि में बदलना होगा

यह कैसे करना है?

यह वह कोड है जिसका उपयोग मैं इमेज को बेस 64 स्ट्रिंग में बदलने के लिए करता हूं:

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

जवाबों:


350

आप बस कुछ तरीकों से निर्मित कुछ अन्य का उपयोग करके मूल रूप से अपने कोड को वापस कर सकते हैं।

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

23
सुनिश्चित करें कि आप "data: image / jpg; base64" पास नहीं कर रहे हैं और केवल इमेज बाइट्स पास कर रहे हैं .. स्ट्रिंग को बाइट्स में बदलना न भूलें .. photoData = photoData.substring (photoData.indexOf (",") + 1); बाइट [] डिकोडेडस्ट्रिंग = Base64.decode (photoData.getBytes (), Base64.DEFAULT); आशा है कि यह किसी के लिए मदद करता है।
श्रीनिवासन

बाइट [] बी = बेस 64.डब्लॉस (पूर्व में इकोकोडेडमेज.गेटबाइट्स (), बेस 64 डीएफएफआईएलटी); बिटमैप = बिटमैपफैक्ट्री.ऑडब्लूटीबैटरएरे (बी, 0, बी। लेलम्ब्रे); बिटमैप मेरे मामले में अशक्त है। बेस 64 स्ट्रिंग को बिटमैप में कैसे बदलें?
राजेश

जैसा कि पहले ही उत्तर दिया जा चुका है यदि एन्कोडेडआईएमएज स्ट्रिंग एक JSON प्रतिक्रिया है, तो बस बेस 64 के बजाय बेस 64.URL_SAFE का उपयोग करें। आधार
चिन्मय

7
डेटा को निकालने के लिए: png और jpeg दोनों के लिए छवि ... यह प्रयास करें:String cleanImage = base64Image.replace("data:image/png;base64,", "").replace("data:image/jpeg;base64,","");
लुइस कैबरेरा बेनिटो

आकर्षण की तरह शानदार काम ... +1
वासुदेव व्यास

65

तो: किसी को भी, जो अभी भी इस सवाल में रुचि रखता है के लिए 1-decodeByteArray रिटर्न शून्य 2-Base64.decode बुरा-बेस 64 अपवाद फेंकता

इसका समाधान यह है: -आपको एपीआई से प्राप्त मूल्य पर विचार करना चाहिए बेस 64 एनकोडेड है और इसे बिटमैप ऑब्जेक्ट में डालने के लिए पहले डीकोड किया जाना चाहिए! अपने बेस 64 एनकोडेड स्ट्रिंग पर एक नज़र डालें, यदि यह इसके साथ शुरू होता है

डेटा: image / जेपीजी, 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);

अब बस इसे बिटमैप ऑब्जेक्ट में बदलने के लिए नीचे दी गई लाइन का उपयोग करें ! :

बिटमैप डीकोडेड बिटमैप = बिटमैपफैक्ट्री। टाइमबीटएयर (डिकोड किए गए बिट्स, 0, डिकोडबाइट्स.लो.प्रोग्राम);

या यदि आप महान पुस्तकालय का उपयोग कर रहे हैं सरकना :

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

यह काम करना चाहिए! यह इस पर एक दिन बर्बाद कर दिया और इस समाधान के लिए आया था!

नोट : यदि आपको अभी भी खराब -6464 त्रुटि हो रही है, तो अन्य Base64.decode झंडों पर विचार करें जैसे Base64.URL_SAFE और इसी तरह


मुझे json प्रतिक्रिया से बेस 64 मिला, Base.64.URL_SAFE का उपयोग खराब-बेस 64 त्रुटि हुई, इस थ्रेड की जांच की और हल किया, अंगूठे ऊपर आदमी ..
लाइवमेकर

17

यह एक बहुत ही पुराने धागा है, लेकिन के रूप में यह मेरे विकास समय का प्रबंधन करने की बहुत ले लिया इस जवाब को साझा करने के बारे में सोचा 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);

1
Base64.URL_SAFE का उपयोग करते समय मुझे एक खराब-बेस 64 (IllegalArgumentException) त्रुटि मिल रही है। मैंने HTML img टैग का उपयोग करके बेस 64 स्ट्रिंग का सत्यापन किया। मैं HTML पेज पर छवि देख रहा हूं।
मुदित

हाय @ मुदित, क्या आपने पता लगाया कि खराब -6464 अपवाद को कैसे ठीक किया जाए? यदि ऐसा है तो क्या आप साझा करने का मन बना रहे हैं? मुझे भी वही समस्या हो रही है। दो दिन अब और विचारों से बाहर चलाने के लिए किया गया है।
इट्स

@ito सुनिश्चित करें कि आप "डेटा: इमेज / jpg; बेस64" पास नहीं कर रहे हैं और केवल इमेज बाइट्स पास कर रहे हैं .. स्ट्रिंग को बाइट्स में बदलना न भूलें .. photoData = photoData.substring (photoData.indexcf) ("," ") + 1); बाइट [] डिकोडेडस्ट्रिंग = Base64.decode (photoData.getBytes (), Base64.DEFAULT);
श्रीनिवासन

मैं भी इस एक शब्द "Base64.URL_SAFE" के लिए बहुत संघर्ष किया ..... मैं json obj के रूप में प्राप्त कर रहा था ... धन्यवाद एक टन
चिन्मय

11

ऑनलाइन चेक करने के लिए आप उपयोग कर सकते हैं

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

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


2
अगर मेरे कोड के साथ या छवि डेटा के साथ कोई समस्या थी, तो यह पता लगाने के लिए वेबसाइट बहुत उपयोगी है। साझा करने के लिए धन्यवाद!
मार्क

2

मैं इस आसान समाधान मिल गया है

बिटमैप से बेस 64 में परिवर्तित करने के लिए इस विधि का उपयोग करें।

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

बेस 64 से बिटमैप या रिवर्ट में बदलने के लिए।

private Bitmap convertBase64ToBitmap(String b64) {
    byte[] imageAsBytes = Base64.decode(b64.getBytes(), Base64.DEFAULT);
    return BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.