如何将图像转换为Base64字符串?

有人可以告诉我的代码转换成Base64字符串的图像(最大200KB)?

我需要知道如何使用android,因为我必须添加功能,上传图像到我的主要应用程序中的远程服务器,把它们放入数据库的一行,作为一个字符串。

我在谷歌和在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)和数据绑定级别上,它明确支持二进制数据的读写。 所以你可以只有POJO与byte []属性,编码/解码自动处理。 而且相当有效,应该这样做。

这个代码在我的项目中运行

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

如果你在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) { } } 
 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; } 

使用此代码:

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