একটি বেসভি string string স্ট্রিংটি কোনও বিটম্যাপ চিত্রে চিত্রকল্পে দেখানোর জন্য কীভাবে রূপান্তর করবেন?


187

আমার কাছে বেস 64 স্ট্রিং রয়েছে যা একটি বিটম্যাপ চিত্র উপস্থাপন করে।

আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে ইমেজভিউতে এটি ব্যবহার করতে আমার সেই স্ট্রিংটিকে আবার বিটম্যাপ চিত্রে রূপান্তর করতে হবে

এটা কিভাবে করতে হবে?

এই কোডটিই আমি চিত্রটিকে বেস 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);

উত্তর:


349

আপনি কেবল অন্য পদ্ধতিতে অন্তর্নির্মিত ব্যবহার করে আপনার কোডটি ফিরিয়ে দিতে পারেন।

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

22
আপনি "ডেটা: চিত্র / জেপিজি; বেস 64" পাস করছেন না এবং কেবল চিত্র বাইটগুলি পাস করছেন না তা নিশ্চিত করুন .. স্ট্রিংটি বাইটে পরিবর্তন করতে ভুলবেন না .. ফটোডেটা = ফটোডেটা.সুবস্ট্রিং (ফটোডেটা.ইনডেক্সফ (",")) + 1); বাইট [] ডিকোডডস্ট্রিং = বেস64.ডেকোড (ফটোডেটা.জেটবাইটস), বেস 64.DEFAULT); আশা করি এটি কারওর জন্য সহায়তা করবে।
শ্রীনিবাসন

বাইট [] খ = বেস64৪৪.ডেকোড (পূর্বের এনকোডডিজম.সেটবাইটস), বেস Base৪.ডিএফএলটি); বিটম্যাপ = বিটম্যাপফ্যাক্টরি.ডেকোডবাইটআর্রে (বি, ০, বি লেন্থ); বিটম্যাপটি আমার ক্ষেত্রে নাল ফেরায়? বেস 64 স্ট্রিংটিকে বিটম্যাপে রূপান্তর করতে কীভাবে?
রাজেশ

যেমন ইতিমধ্যে বললেন encodedImage স্ট্রিং একটি JSON প্রতিক্রিয়া হয়, তাহলে কেবল Base64.DEAULT পরিবর্তে Base64.URL_SAFE ব্যবহার
চিন্ময়

6
ডেটা অপসারণ করতে: চিত্র ... পিএনজি এবং জেপিগ উভয়ের জন্য চেষ্টা করে দেখুন:String cleanImage = base64Image.replace("data:image/png;base64,", "").replace("data:image/jpeg;base64,","");
লুইস ক্যাবেরা বেনিটো

আকর্ষণীয় মত দুর্দান্ত কাজ ... +1
বাসুদেব ব্যাস

65

এখনও এই প্রশ্নে আগ্রহী যে কারও কাছে: যদি: 1-ডিকোডবাইটআর্রে নাল 2-বেস 64 দেয় ec ডেকোড খারাপ-বেস 64 কে বাদ দেয়

সমাধানটি এখানে: -আপনি থেকে আপনাকে প্রেরিত মানটি বেস 64 এনকোড করা উচিত এবং এটি একটি বিটম্যাপ অবজেক্টে কাস্ট করার জন্য প্রথমে ডিকোড করা উচিত! -আপনার বেস 64 এনকোডড স্ট্রিংটি একবার দেখুন, যদি এটি শুরু হয়

ডেটা: ইমেজ / JPG; করুন Base64-

বেস 64.ডেকোড এটি ডিকোড করতে সক্ষম হবে না, সুতরাং এটি আপনার এনকোডযুক্ত স্ট্রিং থেকে সরিয়ে ফেলতে হবে:

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

এখন খাঁটিবেস 64৪ এনকোড করা বস্তুটি ডিকোড করার জন্য প্রস্তুত:

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

এটি কেবল বিটম্যাপ অবজেক্টে রূপান্তর করতে কেবল নীচের লাইনটি ব্যবহার করুন ! :

বিটম্যাপ ডিকোডেড বিটম্যাপ = বিটম্যাপফ্যাক্টরি.ডেকোডবাইটআর্রে (ডিকোডডবাইটস, 0, ডিকোডডবাইটস লেন্থ);

বা আপনি যদি দুর্দান্ত লাইব্রেরি গ্লাইড ব্যবহার করছেন :

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

এই কাজ করা উচিত! এটি এতে একদিন নষ্ট হয় এবং এই সমাধানে উঠে আসে!

দ্রষ্টব্য : আপনি যদি এখনও খারাপ-বেস 64 ত্রুটি পেয়ে থাকেন তবে বেস বেস 64 এর মত অন্যান্য বেস 64. ডিকোড পতাকাগুলি বিবেচনা করুন URL


আমি জেসন প্রতিক্রিয়া থেকে বেস 64৪ পেয়েছি, বেস used4 ব্যবহার করেছি URL ইউরুল ইউজারটি খারাপ-বেস 64৪ টির ত্রুটি পেয়েছে, এই থ্রেডটি পরীক্ষা করে সমাধান করেছে,
থাম্বস

17

এটি একটি খুব পুরানো থ্রেড তবে এই উত্তরটি ভাগ করে নেওয়ার কথা ভেবেছিল কারণ @ অণিরুধের মুখোমুখি হওয়ার কারণে NULLফিরতি পরিচালনা করতে আমার বিকাশের অনেক সময় লেগেছে BitmapFactory.decodeByteArray()

যদি encodedImageস্ট্রিংটি একটি JSONপ্রতিক্রিয়া হয় তবে কেবল Base64.URL_SAFEপরিবর্তে ব্যবহার করুনBase64.DEAULT

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

1
বেস 64 ব্যবহার করার সময় আমি একটি খারাপ-বেস 64 (IllegalArgumentException) ত্রুটি পাচ্ছি URL আমি এইচটিএমএল ইমগ ট্যাগ ব্যবহার করে বেস 64 স্ট্রিং যাচাই করেছি। আমি চিত্রটি এইচটিএমএল পৃষ্ঠায় দেখছি।
মুডিট

হাই @ মুদিত, আপনি কীভাবে খারাপ-বেস 64 ব্যতিক্রম ঠিক করবেন? যদি তাই ভাগ করে নিতে আপত্তি আছে? আমি একই সমস্যা হচ্ছে না। এখন দু'দিন ধরে রয়েছেন এবং ধারণার বাইরে চলেছেন।
এটি

আপনি নিশ্চিত হয়ে নিন যে আপনি "ডেটা: চিত্র / জেপিজি; বেস 64" পাশ করছেন না এবং কেবল চিত্র বাইটগুলিই পাস করছেন না .. স্ট্রিংটি বাইটে পরিবর্তন করতে ভুলবেন না .. ফটোডেটা = ফটোডাটা.সুবস্ট্রিং (ফটোডেটা.ইন্ডেক্সঅফ ("," ") + 1); বাইট [] ডিকোডডস্ট্রিং = বেস64.ডেকোড (ফটোডেটা.জেটবাইটস), বেস 64.DEFAULT);
শ্রীনিবাসন

আমি এই একটি শব্দ "বেস 64৪.আরওলিউর্ডে" এর জন্য অনেক লড়াই করেছি ..... আমি জসন ওজেজ হিসাবে আনছিলাম ... ধন্যবাদ আজ
চিন্ময়

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
আমার কোড বা চিত্রের ডেটা নিয়ে কোনও সমস্যা আছে কিনা তা নির্ধারণের জন্য ওয়েবসাইটটি খুব দরকারী Found ভাগ করে নেওয়ার জন্য ধন্যবাদ!
ও'সুলিভান

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);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.