web-dev-qa-db-ja.com

画像をBase64文字列に変換する方法は?

画像(最大200KB)をBase64 Stringに変換するコードを教えてもらえますか?

Androidでそれを行う方法を知る必要があります。メインアプリのリモートサーバーに画像をアップロードする機能を追加し、文字列としてデータベースの行に配置する必要があるためです。

私はグーグルとStackOverflowで検索していますが、余裕のある簡単な例を見つけることができず、いくつかの例を見つけましたが、文字列に変換することについて話していません。次に、JSONでリモートサーバーにアップロードするために文字列に変換する必要があります。

133

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

309
xil3

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);
94
Chandra Sekhar

JSONを介したbase64が必要な場合は、 Jackson を確認してください。低レベル(JsonParser、JsonGenerator)とデータバインディングレベルの両方で、base64としてバイナリデータの読み取り/書き込みを明示的にサポートしています。したがって、byte []プロパティを持つPOJOを作成するだけで、エンコード/デコードが自動的に処理されます。そして、それも非常に効率的です。

6
StaxMan
// 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;
}

私のプロジェクトで実行されるこのコード完全

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;
}
3
tej shah

これをAndroidで実行している場合、ここに React Native codebase からコピーしたヘルパーを示します。

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) {
  }
}
2
Martin Konicek

image encodeおよびdcode In 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();
0
Asif Ali
byte[] decodedString = Base64.decode(result.getBytes(), Base64.DEFAULT);
0
fdhchc

以下はあなたを助けるかもしれない擬似コードです:

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;
     }
0
vivek

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)
}
0
Sam

Androidで画像を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);
0
Aftab Alam

圧縮せずに画像ファイルを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()
            }
      }
}

お役に立てれば!

0
Alessi 42