1、准备工作

(1)在项目中集成 Base64 代码,集成方法见第一篇博文:android Java BASE64编码和解码一:基础

(2)添加 ImgHelper 工具类

package com.app21;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Bitmap.CompressFormat;
import android.util.Base64;
import sun.misc.BASE64Decoder.encoder.BASE64Decoder;
import sun.misc.BASE64Decoder.encoder.BASE64Encoder;public class ImgHelper  {/*** TODO:将byte数组以Base64方式编码为字符串* @param bytes 待编码的byte数组* @return 编码后的字符串* */public static String encode(byte[] bytes){return new BASE64Encoder().encode(bytes);}/*** TODO:将以Base64方式编码的字符串解码为byte数组* @param encodeStr 待解码的字符串* @return 解码后的byte数组* @throws IOException * */public static byte[] decode(String encodeStr) throws IOException{byte[] bt = null;  BASE64Decoder decoder = new BASE64Decoder();  bt = decoder.decodeBuffer(encodeStr);return bt;}/*** TODO:将两个byte数组连接起来后,返回连接后的Byte数组* @param front 拼接后在前面的数组* @param after 拼接后在后面的数组* @return 拼接后的数组* */public static byte[] connectBytes(byte[] front, byte[] after){byte[] result = new byte[front.length + after.length];System.arraycopy(front, 0, result, 0, after.length);System.arraycopy(after, 0, result, front.length, after.length);return result;}/*** TODO:将图片以Base64方式编码为字符串* @param imgUrl 图片的绝对路径(例如:D:\\jsontest\\abc.jpg)* @return 编码后的字符串* @throws IOException * */public static String encodeImage(String imgUrl) throws IOException{FileInputStream fis = new FileInputStream(imgUrl);byte[] rs = new byte[fis.available()];fis.read(rs);fis.close();return encode(rs);}/*** 将Bitmap转换成字符串* @param bitmap* @return*/public static String bitmaptoString(Bitmap bitmap) {String string = null;ByteArrayOutputStream bStream = new ByteArrayOutputStream();bitmap.compress(CompressFormat.PNG, 100, bStream);byte[] bytes = bStream.toByteArray();string = Base64.encodeToString(bytes, Base64.DEFAULT);return string;}/*** 把byte数组转化成 bitmap对象* @param b* @return*/public static Bitmap bytes2Bimap(byte[] b) {if (b.length != 0) {return BitmapFactory.decodeByteArray(b, 0, b.length);} else {return null;}}
}

2、把drawable里面的 图片进行编码和解码
      主要布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/container"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.app21.MainActivity"tools:ignore="MergeRootFrame" ><Buttonandroid:id="@+id/bt"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="点击到Sd卡文件界面内" /><ImageViewandroid:id="@+id/image1"android:layout_width="100dp"android:layout_height="100dp" /></LinearLayout>

主要代码:

package com.app21;
import java.io.IOException;
import java.io.InputStream;import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;/*** @author admin* 对drawable里面的图片进行存取*/
public class MainActivity extends Activity {ImageView imageView1 ;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main );imageView1 = (ImageView) findViewById( R.id.image1 ) ;//得到bitmap流字符串String bitmapString = ImgHelper.bitmaptoString( getBitmap() ) ;try {Bitmap bitmap = ImgHelper.bytes2Bimap( ImgHelper.decode( bitmapString )) ;imageView1.setImageBitmap( bitmap ) ;} catch (IOException e) {e.printStackTrace();}Button button = (Button) findViewById( R.id.bt ) ;button.setOnClickListener( new OnClickListener() {@Overridepublic void onClick(View v) {startActivity( new Intent( MainActivity.this , MainActivityFile.class ));}});}//得到bitmappublic Bitmap getBitmap(){InputStream inputStream = getResources().openRawResource(R.drawable.ic_launcher );  BitmapDrawable drawable = new BitmapDrawable(inputStream);  Bitmap bitmap = drawable.getBitmap();  return bitmap ;}
}

3、对Sd卡中的图片进行编码和解码

主要布局

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6     tools:ignore="MergeRootFrame" >
 7
 8     <ImageView
 9         android:id="@+id/image_file"
10         android:layout_width="wrap_content"
11         android:layout_height="wrap_content" />
12
13 </LinearLayout>

主要代码

package com.app21;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;public class MainActivityFile extends Activity {ImageView imageView1 ;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_file  );imageView1 = (ImageView) findViewById( R.id.image_file ) ;String str  ;//将图片转化为字符串try {str = ImgHelper.encodeImage( getFileName() );Bitmap bitmap = ImgHelper.bytes2Bimap( ImgHelper.decode( str )) ;imageView1.setImageBitmap( bitmap ) ;} catch (IOException e) {e.printStackTrace();}}/*** 把图片存到本地* @return sd卡图片的路径*/String getFileName(){Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.libingbing  );File SpicyDirectory = new File("/sdcard/Images/");SpicyDirectory.mkdirs(); String filename="/sdcard/Images/" + "test11111" + ".jpg";FileOutputStream out = null ;try {out = new FileOutputStream(filename);bmp.compress(Bitmap.CompressFormat.JPEG , 100 , out);}catch (Exception e) {e.printStackTrace();}finally{try {out.flush();}catch (IOException e){e.printStackTrace();}}try {out.close();} catch (IOException e){e.printStackTrace();}out=null;return filename ;}
}

4、注意事项 :

在对SD卡中的图片编码和解码是需要添加权限

    <!-- 在SDCard中创建与删除文件权限 -->    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />    <!-- 往SDCard写入数据权限 -->    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <!-- 从SDCard读取数据权限 -->    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

5、运行结果 :

       

6、项目下载地址:

http://download.csdn.net/detail/yanzi2015/8712419

7、其他图片Base64编码的相关博客

http://www.cnblogs.com/coco1s/p/4375774.html

转载于:https://www.cnblogs.com/zhaoyanjun/p/4511939.html

android Java BASE64编码和解码二:图片的编码和解码相关推荐

  1. android Java BASE64编码和解码一:基础

    今天在做Android项目的时候遇到一个问题,需求是向服务器上传一张图片,要求把图片转化成图片流放在 json字符串里传输. 类似这样的: {"name":"jike&q ...

  2. android java tga转png_java 里.tga图片怎么用啊,是不是要导入一个包,真的找不到资源,希望来位大神帮帮我 小弟在此拜谢!...

    展开全部 struct sTGAHEADER { //TGA文件头结构 public byte id_length; public byte colormap_type; public byte im ...

  3. 【Android 安装包优化】WebP 应用 ( Android 中使用 libwebp.so 库解码 WebP 图片 )

    文章目录 一.Android 中使用 libwebp.so 库解码 WebP 图片 二.完整代码示例 三.参考资料 一.Android 中使用 libwebp.so 库解码 WebP 图片 libwe ...

  4. android base64 转图片,Android 中 Base64 转换成 图片

    场景 项目中有个功能是显示微信付款码,为了节省服务器存储,将图片以Base64的形式存储,客户端接收到后将Base64转换成图片并加载,但是不要存放大图,在网上看到的大多都是使用了一个java库(im ...

  5. Unicode码------二个字节编码的系统

    Unicode码:Unicode码也是一种国际标准编码,采用二个字节编码 它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言.跨平台进行文本转换.处理的要求. Unicode编码则是 ...

  6. a律13折线pcm编码例题_a律13折线编码段内码怎么确定

    展开全部 回答如下: 首先,列表.然后根据你的抽样脉冲 值的正负,判断极性码,正值为1,负值为0,其次,e5a48de588b662616964757a686964616f31333365643662 ...

  7. Java生成二维码以及二维码解码,图片与base64互相转化的实现

    二维码生成是使用 google 开源图形码工具Zxing. maven依赖如下: <dependency><groupId>com.google.zxing</group ...

  8. Java实现二维码编码与解码

    1.构建maven项目,导入对应依赖 这里引用谷歌的zxing包实现二维码的编码与解码,导入依赖如下所示 <!-- 谷歌二维码 --> <dependency><grou ...

  9. android生成png图片,Android 中将 base64图片 解码为.png图片

    android 中将 "base64图片" 解码为".png"图片 参考: 方法一 String base64Img = ""; // 若包 ...

最新文章

  1. 2022-2028年中国数码相机行业投资分析及前景预测报告
  2. kibana使用_手把手教你使用Nginx实现Kibana的安全认证
  3. “三次握手,四次挥手”你真的懂吗?
  4. linux下grub故障(使用光盘进入救援模式)
  5. 课程升级 | 极速构建知识体系,即学即用 Serverless
  6. NGINX介绍及参数
  7. 剑指offer之连续子数组的最大和
  8. matlab2c使用c++实现matlab函数系列教程-normpdf函数
  9. java线程视频教程_java线程视频教程
  10. 简单远程控制(仅传递鼠标和键盘消息)的实现
  11. LCD驱动程序详细讲解(三)
  12. 酒水茶饮行业的门店管理系统进销存软件怎么挑选?
  13. 国二c语言南开版的机试100题,[互联网]免费ncre全国计算机等级考试二级c语言上机---南开100题答案...
  14. R语言使用:符号生成向量数据、使用pie函数可视化饼图、自定义设置饼图色彩为彩虹色
  15. oracle写一本日历
  16. 小谢同学的C语言之路————第一章 初遇C语言 第二集 数据类型
  17. 一种非极大值抑制(non_max_suppression, nms)的代码实现方式
  18. 关于快排算法的基本实现
  19. 程序员:用代码改变世界
  20. C#使用 WebBrowser制作网页游戏辅助工具关键技术分析

热门文章

  1. Java设计模式之享元flyweight模式代码示例
  2. python sqlite3更新数据,python sqlite3-使用f字符串更新数据库函数
  3. Lambda-常用函数式接口
  4. git clone报错:fatal: could not create work tree dir ‘code_update‘
  5. 最优化——对偶问题的性质(弱对偶性,强对偶性),对偶问题形式的书写(对偶规则)
  6. Iterator和ListIterator接口的使用和区别
  7. oracle索引中丢失in或out参数,oracle 11g给表建触发器错误“索引中丢失 IN 或 OUT 参数:: 1...
  8. python函数定义错误_[转载]python之函数的使用及异常处理2021.1.30
  9. Cpp / checked_delete 原理
  10. TCP/IP / 状态转换图