Как преобразовать строку Base64 в растровое изображение, чтобы показать его в ImageView?
У меня есть строка Base64, которая представляет собой растровое изображение.
Мне нужно снова преобразовать эту строку в растровое изображение, чтобы использовать ее на 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);
4 ответов:
вы можете просто вернуть свой код, используя некоторые другие встроенные методы.
byte[] decodedString = Base64.decode(encodedImage, Base64.DEFAULT); Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
всем, кто еще интересуется этим вопросом: Если: 1-decodeByteArray возвращает null 2-Base64.декодирование бросает bad-base64 Exception
вот решение: -Вы должны учитывать, что значение, отправленное вам из API, кодируется Base64 и должно быть декодировано сначала, чтобы привести его к Растровому объекту! - Взгляните на вашу строку в кодировке Base64, если она начинается с
данные: изображение / jpg; base64
В Формате Base64.декодировать не удастся декодируйте его, поэтому он должен быть удален из вашей закодированной строки:
final String encodedString = "data:image/jpg;base64, ...."; final String pureBase64Encoded = encodedString.substring(encodedString.indexOf(",") + 1);Теперь pureBase64Encoded объект готов к декодированию:
final byte[] decodedBytes = Base64.decode(pureBase64Encoded, Base64.DEFAULT);Теперь просто используйте строку ниже, чтобы превратить это в точечный
это очень старый поток, но думал поделиться этим ответом, так как для управления им потребовалось много времени на разработку
NULLвозвращениеBitmapFactory.decodeByteArray()как столкнулся @Anirudh.если
encodedImageстрокаJSONответ, просто использоватьBase64.URL_SAFEвместоBase64.DEAULTbyte[] 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); } }
Comments