이미지를 Base64 문자열로 변환하는 방법은 무엇입니까?
누군가 이미지 (최대 200KB)를 Base64 String으로 변환하는 코드를 말해 줄 수 있습니까?
안드로이드로 이미지를 작성하는 방법을 알아야합니다. 이미지를 데이터베이스의 행에 문자열로 배치하여 기본 앱의 원격 서버에 이미지를 업로드하는 기능을 추가해야하기 때문입니다.
Google과 StackOverflow에서 검색하고 있지만 감당할 수있는 쉬운 예제를 찾을 수 없으며 예제도 있지만 문자열로 변환하려고하지 않습니다. 그런 다음 JSON으로 원격 서버에 업로드하려면 문자열로 변환해야합니다.
Base64 Android 클래스를 사용할 수 있습니다.
String encodedImage = Base64.encodeToString(byteArrayImage, Base64.DEFAULT);
그래도 이미지를 바이트 배열로 변환해야합니다. 예를 들면 다음과 같습니다.
Bitmap bm = BitmapFactory.decodeFile("/path/to/image.jpg");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object
byte[] b = baos.toByteArray();
* 업데이트 *
이전 SDK 라이브러리를 사용하는 경우 (이전 버전의 OS가있는 전화기에서 작동하기를 원하기 때문에) Base64 클래스는 패키지로 제공되지 않습니다 (단, API 레벨 8, 즉 버전 2.2에서 나왔기 때문에).
이 기사에서 해결 방법을 확인하십시오.
http://androidcodemonkey.blogspot.com/2010/03/how-to-base64-encode-decode-android.html
사용하는 대신 Bitmap
사소한 일을 통해이를 수행 할 수도 있습니다 InputStream
. 글쎄, 확실하지 않지만 조금 효율적이라고 생각합니다.
InputStream inputStream = new FileInputStream(fileName);//You can get an inputStream using any IO API
byte[] bytes;
byte[] buffer = new byte[8192];
int bytesRead;
ByteArrayOutputStream output = new ByteArrayOutputStream();
try {
while ((bytesRead = inputStream.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
}
bytes = output.toByteArray();
String encodedString = Base64.encodeToString(bytes, Base64.DEFAULT);
JSON보다 base64가 필요한 경우 Jackson을 확인하십시오 . 저수준 (JsonParser, JsonGenerator) 및 데이터 바인딩 수준에서 이진 데이터 읽기 / 쓰기를 base64로 명시 적으로 지원합니다. 따라서 byte [] 속성으로 POJO를 가질 수 있으며 인코딩 / 디코딩이 자동으로 처리됩니다. 그리고 그 문제도 매우 효율적입니다.
// put the image file path into this method
public static String getFileToByte(String filePath){
Bitmap bmp = null;
ByteArrayOutputStream bos = null;
byte[] bt = null;
String encodeString = null;
try{
bmp = BitmapFactory.decodeFile(filePath);
bos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, bos);
bt = bos.toByteArray();
encodeString = Base64.encodeToString(bt, Base64.DEFAULT);
}catch (Exception e){
e.printStackTrace();
}
return encodeString;
}
이 코드 prefect는 내 프로젝트에서 실행됩니다.
profile_image.buildDrawingCache();
Bitmap bmap = profile_image.getDrawingCache();
String encodedImageData =getEncoded64ImageStringFromBitmap(bmap);
public String getEncoded64ImageStringFromBitmap(Bitmap bitmap) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.JPEG, 70, stream);
byte[] byteFormat = stream.toByteArray();
// get the base 64 string
String imgString = Base64.encodeToString(byteFormat, Base64.NO_WRAP);
return imgString;
}
Android 에서이 작업을 수행하는 경우 React Native 코드베이스 에서 복사 한 도우미가 있습니다 .
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import android.util.Base64;
import android.util.Base64OutputStream;
import android.util.Log;
// You probably don't want to do this with large files
// (will allocate a large string and can cause an OOM crash).
private String readFileAsBase64String(String path) {
try {
InputStream is = new FileInputStream(path);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Base64OutputStream b64os = new Base64OutputStream(baos, Base64.DEFAULT);
byte[] buffer = new byte[8192];
int bytesRead;
try {
while ((bytesRead = is.read(buffer)) > -1) {
b64os.write(buffer, 0, bytesRead);
}
return baos.toString();
} catch (IOException e) {
Log.e(TAG, "Cannot read file " + path, e);
// Or throw if you prefer
return "";
} finally {
closeQuietly(is);
closeQuietly(b64os); // This also closes baos
}
} catch (FileNotFoundException e) {
Log.e(TAG, "File not found " + path, e);
// Or throw if you prefer
return "";
}
}
private static void closeQuietly(Closeable closeable) {
try {
closeable.close();
} catch (IOException e) {
}
}
Kotlin의 인코딩 및 디코딩 코드는 다음과 같습니다.
fun encode(imageUri: Uri): String {
val input = activity.getContentResolver().openInputStream(imageUri)
val image = BitmapFactory.decodeStream(input , null, null)
//encode image to base64 string
val baos = ByteArrayOutputStream()
image.compress(Bitmap.CompressFormat.JPEG, 100, baos)
var imageBytes = baos.toByteArray()
val imageString = Base64.encodeToString(imageBytes, Base64.DEFAULT)
return imageString
}
fun decode(imageString: String) {
//decode base64 string to image
val imageBytes = Base64.decode(imageString, Base64.DEFAULT)
val decodedImage = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
imageview.setImageBitmap(decodedImage)
}
byte[] decodedString = Base64.decode(result.getBytes(), Base64.DEFAULT);
다음은 도움이 될 수있는 의사 코드입니다.
public String getBase64FromFile(String path)
{
Bitmap bmp = null;
ByteArrayOutputStream baos = null;
byte[] baat = null;
String encodeString = null;
try
{
bmp = BitmapFactory.decodeFile(path);
baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
baat = baos.toByteArray();
encodeString = Base64.encodeToString(baat, Base64.DEFAULT);
}
catch (Exception e)
{
e.printStackTrace();
}
return encodeString;
}
안드로이드에서 이미지를 base64 문자열로 변환
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.yourimage);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageBytes = baos.toByteArray();
String imageString = Base64.encodeToString(imageBytes, Base64.DEFAULT);
압축 또는 파일을 먼저 비트 맵으로 변환하지 않고 이미지 파일을 Base64 문자열로 변환하는 효율적인 방법을 찾고있는 경우 대신 파일을 base64로 인코딩 할 수 있습니다
val base64EncodedImage = FileInputStream(imageItem.localSrc).use {inputStream - >
ByteArrayOutputStream().use {outputStream - >
Base64OutputStream(outputStream, Base64.DEFAULT).use {
base64FilterStream - >
inputStream.copyTo(base64FilterStream)
base64FilterStream.flush()
outputStream.toString()
}
}
}
도움이 되었기를 바랍니다!
다음의 코드 image encode
와 dcode
에서 xml
파일
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="yyuyuyuuyuyuyu"
android:id="@+id/tv5"
/>
에서 java
파일
TextView textView5;
Bitmap bitmap;
textView5=(TextView) findViewById(R.id.tv5);
bitmap= BitmapFactory.decodeResource(getResources(),R.drawable.logo);
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... voids) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 70, stream);
byte[] byteFormat = stream.toByteArray();
// get the base 64 string
String imgString = Base64.encodeToString(byteFormat, Base64.NO_WRAP);
return imgString;
}
@Override
protected void onPostExecute(String s) {
textView5.setText(s);
}
}.execute();
이 코드를 사용하십시오 :
byte[ ] decodedString = Base64.decode(Base64String.getBytes(), Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
참고 URL : https://stackoverflow.com/questions/4830711/how-to-convert-a-image-into-base64-string
'IT story' 카테고리의 다른 글
Linux 명령 출력에서 첫 번째 줄 생략 (0) | 2020.06.21 |
---|---|
UITableView 헤더 섹션 사용자 정의 (0) | 2020.06.21 |
디렉토리를 반복적으로 반복하여 특정 확장자를 가진 파일을 삭제하는 방법 (0) | 2020.06.21 |
jQuery에서 입력 [유형 = 텍스트]의 값 변경 감지 (0) | 2020.06.21 |
위도에 가려면 Google Maps URL에서 어떤 매개 변수를 사용해야합니까? (0) | 2020.06.21 |