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, , result, , after.length);
System.arraycopy(after, , 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, , 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 != ) {
return BitmapFactory.decodeByteArray(b, , 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" > <Button
android:id="@+id/bt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="点击到Sd卡文件界面内" /> <ImageView
android: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 ; @Override
protected 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() {
@Override
public void onClick(View v) {
startActivity( new Intent( MainActivity.this , MainActivityFile.class ));
}
});
} //得到bitmap
public Bitmap getBitmap(){
InputStream inputStream = getResources().openRawResource(R.drawable.ic_launcher );
BitmapDrawable drawable = new BitmapDrawable(inputStream);
Bitmap bitmap = drawable.getBitmap();
return bitmap ;
}
}

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

主要布局

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:ignore="MergeRootFrame" > <ImageView
android:id="@+id/image_file"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> </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 ; @Override
protected 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

android Java BASE64编码和解码二:图片的编码和解码的更多相关文章

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

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

  2. Kotlin/Java Base64编码和解码(图片、文件)

    原文: Kotlin/Java Base64编码和解码(图片.文件) | Stars-One的杂货小窝 最近在项目中使用到了Base64编码和解码,便是稍微写篇文章记录一下 PS:本文代码都是使用Ko ...

  3. java base64编码、解码的三种方式

      java base64编码.解码 CreationTime--2018年7月24日10点38分 Author:Marydon 1.方式一:DatatypeConverter 说明:使用jdk自带的 ...

  4. java 二维码编码解码

    做一个小项目的时候写了个二维码编码和解码的小工具,感觉可能用得到,有兴趣的朋友可以看下 再次之前,徐需要用到google的zxing相关的jar包,还有javax相关包 以上为可能用到的jar pac ...

  5. JAVA二维码编码&解码

    QRCodeUtil.java package web; import java.awt.AlphaComposite; import java.awt.Color; import java.awt. ...

  6. Java android DES+Base64加密解密

    服务器与客户端加密解密传输, 中间遇到各种坑,客户端无论用AES还是DES解密时都会出现错误,后来才看到好多人说要用AES/DES加完密后还要BASE64加密,照做时发现android和java的Ba ...

  7. 利用zxing制作彩色,高容错,支持中文等UTF编码的QR二维码图片

    利用zxing制作彩色,高容错,支持中文等UTF编码的QR二维码图片.代码如下 import java.awt.Color;import java.io.File;import java.util.H ...

  8. android 开发 解码gif图片,获取每帧bitmap

    环境:android 4.3  (注意对于android4.4版本解码出来不正确,除了第一帧正确外,其余的都是显示不同的地方)  通用版本见: android 开发对gif解码(适配android 4 ...

  9. JAVA中生成、解析二维码图片的方法

    JAVA中生成.解析二维码的方法并不复杂,使用google的zxing包就可以实现.下面的方法包含了生成二维码.在中间附加logo.添加文字功能,并有解析二维码的方法. 一.下载zxing的架包,并导 ...

随机推荐

  1. 一款基于HTML5的Web 3D开发工具

    在我们协助客户进行3D应用的开发过程中,客户遇到的最头疼的问题是如何在短时间内学会使用TWaver 3D引擎,以及使用TWaver 3D来创建和导入项目所需的各种3D业务模型.由于项目涵盖的行业繁多. ...

  2. SNF开发平台WinForm之六-上传下载组件使用-SNF快速开发平台3.3-Spring.Net.Framework

    6.1运行效果: 6.2开发实现: 1.先在要使用的项目进行引用,SNF.WinForm.Attachments.dll文件. 2.在工具箱内新建选项卡->选择项,浏览找到文件SNF.WinFo ...

  3. 基于selenium的pyse自动化测试框架

    WebUI automation testing framework based on Selenium 介绍: pyse基于selenium(webdriver)进行了简单的二次封装,比seleni ...

  4. [python]非常小的下载图片脚本(非通用)

    说在最前面:这不是一个十分通用的下载图片脚本,只是根据我的一个小问题,为了减少我的重复性工作写的脚本. 问题 起因:我的这篇博文什么是真正的程序员浏览量超过了4000+. 问题来了:里面的图片我都是用 ...

  5. UWP开发入门(二十)——键盘弹起时变更界面布局

    UWP APP在键盘弹起或隐藏时,并不会自动处理界面布局.有时会出现键盘遮挡了下一个需要填写的文本框,或是下一步按钮的情况.本篇我们以登录界面做例子,用一种巧妙简单的方式在键盘弹起和隐藏时更改界面的布 ...

  6. SQL中的循环

    DECLARE @SOInfoList TABLE ( SONumber INT, SODate datetime, Status char(1) ) INSERT INTO @SOInfoList ...

  7. Const的用法

    宏和const的区别: 1.宏执行的是替换操作,这也就意味着会在内存中开辟多个临时空间 这样显然不是很好 2.宏不可以修改 const : 用const修饰的变量 为常量 不能修改,在内存中只有一份内 ...

  8. 利用session做国际化引起的old区内存爆满及修复方法

    题记:昨天加班打车回家,看见前面有辆路虎在高速上开的巨慢,挡住了我坐的出租车的路,于是就跟司机吐槽了一句:“前面这车怎么这么面啊?”,司机沉默了大概3秒,说了一句富含哲理性的话:“没有面车,只有面人” ...

  9. 【转】Python中的GIL、多进程和多线程

    转自:http://lesliezhu.github.io/public/2015-04-20-python-multi-process-thread.html 目录 1. GIL(Global In ...

  10. 【转】http-equiv="X-UA-Compatible" 设置IE浏览器兼容模式详解

    文件兼容性用于定义让IE如何编译你的网页.此文件解释文件兼容性,如何指定你网站的文件兼容性模式以及如何判断一个网页该使用的文件模式. 前言 为了帮助确保你的网页在所有未来的IE版本都有一致的外观,IE ...