通经常使用Base64这样的编解码方式将二进制数据转换成可见的字符串格式,就是我们常说的大串。10块钱一串的那种,^_^。

Android的android.util包下直接提供了一个功能十分完备的Base64类供我们使用,以下就演示一下怎样将一张图片进行Base64的编解码。

1.找到那张图片

public void onEncodeClicked(View view) {

        //select picture
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, OPEN_PHOTO_FOLDER_REQUEST_CODE);
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(OPEN_PHOTO_FOLDER_REQUEST_CODE == requestCode && RESULT_OK == resultCode) { //encode the image
Uri uri = data.getData();
try {
//get the image path
String[] projection = {MediaStore.Images.Media.DATA};
CursorLoader cursorLoader = new CursorLoader(this,uri,projection,null,null,null);
Cursor cursor = cursorLoader.loadInBackground();
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst(); String path = cursor.getString(column_index);
Log.d(TAG,"real path: "+path);
encode(path);
} catch (Exception ex) {
Log.e(TAG, "failed." + ex.getMessage());
}
}
}

2.将图片转换成bitmap并编码

private void encode(String path) {
//decode to bitmap
Bitmap bitmap = BitmapFactory.decodeFile(path);
Log.d(TAG, "bitmap width: " + bitmap.getWidth() + " height: " + bitmap.getHeight());
//convert to byte array
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] bytes = baos.toByteArray(); //base64 encode
byte[] encode = Base64.encode(bytes,Base64.DEFAULT);
String encodeString = new String(encode);
mTvShow.setText(encodeString);
}

3.将大串还原成图片

    public void onDecodeClicked(View view) {
byte[] decode = Base64.decode(mTvShow.getText().toString(),Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(decode, 0, decode.length);
//save to image on sdcard
saveBitmap(bitmap);
} private void saveBitmap(Bitmap bitmap) {
try {
String path = Environment.getExternalStorageDirectory().getPath()
+"/decodeImage.jpg";
Log.d("linc","path is "+path);
OutputStream stream = new FileOutputStream(path);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, stream);
stream.close();
Log.e("linc","jpg okay!");
} catch (IOException e) {
e.printStackTrace();
Log.e("linc","failed: "+e.getMessage());
}
}

须要注意的是,一张图片的编码速度会非常慢,假设图片非常大就更慢了。毕竟手机的处理能力有限。只是decode的速度确实相当的快,超出你的想象。好了,就是这样简单,今天就到这里了,晚安!

最新文章

  1. 代码的坏味道(5)——数据泥团(Data Clumps)
  2. 20145226夏艺华 《Java程序设计》第0周学习总结
  3. zlhome.com Deal
  4. ImageLoader介绍2
  5. C语言itoa()函数和atoi()函数详解(整数转字符C实现)
  6. 分享一个导出Excel时页面不跳转的小技巧
  7. UML 行为图之用例图 总结
  8. Linux Shell编程(23)——文本处理命令
  9. hdu-4612-Warm up(边双连通分量--有重边)
  10. Json.NET提供依赖注
  11. HTML5学习之语义化标签(一)
  12. iOS8 UILocalNotification 添加启动授权
  13. xml生成方式二(Xml序列化器XmlSerializer)
  14. spring注解的相关配置
  15. Java8 Base64
  16. cf1136D. Nastya Is Buying Lunch(贪心)
  17. Blast
  18. Python内置模块与标准库
  19. Javascript 日期 加减
  20. 对python生成器特性使用的好例子

热门文章

  1. js兼容性——获取当前浏览器窗口的宽高
  2. 前后端分离开发,跨域访问的apche设置
  3. C#-基础部分思维导图
  4. cogs 2170. 大整数取模
  5. JavaScript正則表達式知识汇总
  6. Springmvc Get请求Tomcat、WebLogic中文乱码问题
  7. nginx源代码分析--从源代码看nginx框架总结
  8. Android recycleView的研究和探讨
  9. MySQL之----在java编程加强知识点
  10. Java路径问题终于解决方式—可定位全部资源的相对路径寻址