android Java BASE64编码和解码二:图片的编码和解码
(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" > <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卡中的图片进行编码和解码
主要布局
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 ; @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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android 设计模式一:EIT造型
前言:首先不提造型,我们先来学习公式。 思绪回到于十七世纪中,牛顿提出了简单公式:F=ma;让人们能轻易理解物体运动的复杂<关系>。 再如,于二十世纪初,爱因斯坦发表了简单公式:E=MC平方;让人们能理解复杂的质量、能量与光速之间的复杂关系。 看起来很复杂的天体物理运算,只要找到了公式就会变得简单。 对于同一类问题,只要找到其中的运行规律,就可以万变不离其宗的套公式解决。那么这里的公式就是造型。 1、什么是造型 ? 造型可以看做一个皮箱,里面可以装各式各样的东西,可以看做是一种抽象。 类就是一种最小的造型,如果装上树叶,就是树叶造型;装上人,就是人造型。 类似于原子,各式各样的原子,氢原子,氧原子.......,也可以有各式各样的造型。 代码造型 原子层级的,设计模式是分子级别的。代码造型可以组合成各式各样的设计模式, 除此之外,还可以组合成为框架,更大的是可以组合成为平台。这就是基于代码层级的代码造型的真正威力。 而EIT造型正是指名一种东西。 2、什么是EIT造型 ? EIT造型,一种比类的范围更大,比模式(Pattern)稍微小的一种新的代码造型。 3、造型的模...
- 下一篇
android res文件夹下面的 values-v11 、 values-v14
values-v11代表在API 11+的设备上,用该目录下的styles.xml代替res/values/styles.xml values-v14代表在API 14+的设备上,用该目录下的styles.xml代替res/values/styles.xml 其中API 11+代表android 3.0 + 其中API 14+代表android 4.0 +
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果