2011-01-29 15 views
135

मेरे पास बेस 64 स्ट्रिंग है जो बिटमैप छवि का प्रतिनिधित्व करती है।एक छवि दृश्य में दिखाने के लिए बेस 64 स्ट्रिंग को बिटमैप छवि में कैसे परिवर्तित करें?

मैं फिर से अपने Android एप्लिकेशन

में एक imageView पर इसका इस्तेमाल करने के लिए इसे कैसे करने के लिए एक बिटमैप छवि में है कि स्ट्रिंग को बदलने की जरूरत है?

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

उत्तर

256

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

इस कोड है कि मैं base64 स्ट्रिंग में छवि को बदलने के लिए इस्तेमाल करते हैं।

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

decodedByte मेरे मामले – Anirudh

+1

में अशक्त रिटर्न की तरह छवि के लिए स्ट्रिंग में बदल सकते हैं @ अनिरुध: क्या यह आपके लिए काम करता है? – mudit

+11

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

14

यह एक बहुत पुरानी धागा लेकिन के रूप में यह BitmapFactory.decodeByteArray() की NULL वापसी का प्रबंधन करने के रूप में @Anirudh सामना करना पड़ा है मेरे विकास समय के बहुत ले लिया इस जवाब को साझा करने के बारे में सोचा है।

encodedImage स्ट्रिंग एक JSON प्रतिक्रिया है, तो बस Base64.URL_SAFEBase64.DEAULT

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

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

+0

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

+0

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

34

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

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

डेटा शुरू होता है: image/जेपीजी, बेस 64

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

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

बिटमैप decodedBitmap = BitmapFactory.decodeByteArray (decodedBytes, 0, decodedBytes.length);

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

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

यह काम करना चाहिए! इस पर एक दिन बर्बाद हो गया और इस समाधान तक पहुंचा!

नोट: आप अभी भी बुरा-बेस 64 त्रुटि Base64 जैसे अन्य Base64.decode झंडे पर विचार मिल रहे हैं।URL_SAFE और इतने

+0

मुझे जेसन प्रतिक्रिया से बेस 64 मिला, बेस 64.URL_SAFE खराब-बेस 64 त्रुटि, इस धागे की जांच की और हल हो गया, आदमी को थंबस .. – livemaker

4

पर ऑनलाइन जाँच करने के लिए आप उपयोग कर सकते

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

+0

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

संबंधित मुद्दे