wake-up-neo.com

Wie konvertiere ich ein Bild in einen Base64-String?

Kann mir jemand den Code mitteilen, um ein Bild (maximal 200 KB) in Base64-String umzuwandeln?

Ich muss wissen, wie es mit Android geht, weil ich die Funktionalität hinzufügen muss, um Bilder auf einen Remote-Server in meiner Hauptanwendung hochzuladen, und diese als String in eine Reihe der Datenbank einzufügen.

Ich suche in google und in StackOverflow, aber ich konnte keine einfachen Beispiele finden, die ich mir leisten kann. Außerdem finde ich einige Beispiele, aber sie sprechen nicht über die Umwandlung in String. Dann muss ich mich in einen String umwandeln, um ihn per JSON auf meinen Remote-Server hochzuladen.

131

Sie können die Android-Klasse Base64 verwenden:

String encodedImage = Base64.encodeToString(byteArrayImage, Base64.DEFAULT);

Sie müssen Ihr Bild jedoch in ein Byte-Array konvertieren. Hier ist ein Beispiel:

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

* Update *

Wenn Sie eine ältere SDK-Bibliothek verwenden (weil diese Funktion auf Telefonen mit älteren Versionen des Betriebssystems ausgeführt werden soll), ist die Base64-Klasse nicht integriert (da sie gerade in API-Ebene 8, auch als Version 2.2 veröffentlicht wurde).

In diesem Artikel finden Sie eine Problemumgehung:

http://androidcodemonkey.blogspot.com/2010/03/wie-nach-base64-encode-decode-Android.html

296
xil3

Anstelle von Bitmap können Sie dies auch über die triviale InputStream durchführen. Ich bin mir nicht sicher, aber ich denke, es ist ein bisschen effizient

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

Wenn Sie base64 über JSON benötigen, checken Sie Jackson : Es unterstützt explizit das Lesen/Schreiben von Binärdaten als base64 sowohl auf niedriger Ebene (JsonParser, JsonGenerator) als auch auf Datenbindungsebene. Sie können also einfach POJOs mit byte [] - Eigenschaften haben, und das Kodieren/Dekodieren wird automatisch ausgeführt .. Und ziemlich effizient, sollte dies eine Rolle spielen.

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

dieser Code-Präfekt wird in meinem Projekt ausgeführt

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

Wenn Sie dies auf Android tun, ist hier ein Helfer aus der React Native-Codebase kopiert:

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

Hier ist ein Code für image encode und dcode in xml Datei

 <TextView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="yyuyuyuuyuyuyu"
        Android:id="@+id/tv5"
        />

In Java Datei

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

Nachfolgend finden Sie den Pseudo-Code, der Ihnen helfen kann:

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

Hier ist der Kodierungs- und Dekodierungscode in 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

Konvertieren Sie Bild in Base64-Zeichenfolge in Android

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

Wenn Sie nach einer effizienten Methode suchen, um eine Bilddatei ohne Komprimierung in eine Base64-Zeichenfolge zu konvertieren oder die Datei zuerst in eine Bitmap zu konvertieren, können Sie stattdessen die Datei als base64 codieren

val base64EncodedImage = FileInputStream(imageItem.localSrc).use {inputStream - >
    ByteArrayOutputStream().use {outputStream - >
            Base64OutputStream(outputStream, Base64.DEFAULT).use {
                base64FilterStream - >
                    inputStream.copyTo(base64FilterStream)
                base64FilterStream.flush()
                outputStream.toString()
            }
      }
}

Hoffe das hilft!

0
Alessi 42