Java之图片与Base64字符之间的相互转换

Base64工具类

package com.juzilicai.framework.common.util;

import java.io.UnsupportedEncodingException;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
 * base64 编码 〈一句话功能简述〉 〈功能详细描述〉
 * 
 * @version 2017年7月25日
 * @see Base64
 * @since
 */
public class Base64 {
	/**
	 * 加密
	 * 
	 * @param str
	 * @return
	 */
	public static String encode(byte[] b) {
		String s = null;
		if (b != null) {
			s = new BASE64Encoder().encode(b);
		}
		return s;
	}

	/**
	 * 加密
	 * 
	 * @param str
	 * @return
	 */
	public static String encode(String src) {
		return encode(src.getBytes());
	}

	/**
	 * 解密
	 * 
	 * @param s
	 * @return
	 */
	public static byte[] decode(String s) {
		byte[] b = null;
		if (s != null) {
			BASE64Decoder decoder = new BASE64Decoder();
			try {
				b = decoder.decodeBuffer(s);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return b;
	}

	/**
	 * 解密
	 * 
	 * @param s
	 * @return
	 */
	public static String decodeStr(String s) {
		byte[] b = decode(s);
		try {
			return b != null ? (new String(b, "UTF-8")) : null;
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
			return null;
		}
	}
}

互相转换的实现:

package com.juzilicai.encrypt.impl;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.commons.io.FileUtils;

import com.juzilicai.framework.common.util.Base64;

import net.coobird.thumbnailator.Thumbnails;

/**
 * 功能描述:
 * 
 * @author deekeydai 2018年5月30日
 */
public class MainTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		File imgFile = new File("d://xxxxx.png");
		Base64 base64 = new Base64();
		InputStream in = null;
		byte[] data = null;
		// 读取图片字节数组
		try {
			in = new FileInputStream(imgFile);
			data = new byte[in.available()];
			in.read(data);
			in.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		// 对字节数组Base64编码
		System.err.println(data);
		System.out.println(base64.encode(data));

		String imgStr = base64.encode(data);
		System.err.println(imgStr.length());
		try {
			byte[] b = base64.decode(imgStr);
			for (int i = 0; i < b.length; ++i) {
				if (b[i] < 0) {// 调整异常数据
					b[i] += 256;
				}
			}
			// 生成jpeg图片
			String imgFilePath = "d://yyyyy.png";
			FileUtils.writeByteArrayToFile(new File(imgFilePath), b);
						
			/**
			 * 生成缩略图
			 * 若图片横比200小,高比300小,不变   
			 * 若图片横比200小,高比300大,高缩小到300,图片比例不变   
			 * 若图片横比200大,高比300小,横缩小到200,图片比例不变   
			 * 若图片横比200大,高比300大,图片按比例缩小,横为200或高为300 
			 */
			Thumbnails.of(new File(imgFilePath)).size(200, 300).toFile("d://yyyyy-slt.png");
//			OutputStream out = new FileOutputStream(imgFilePath);
//			out.write(b);
//			out.flush();
//			out.close();
			System.err.println("OK");
		} catch (Exception e) {
			
			System.out.println("error");
		}
	}

}

注意:

生成缩率图的Thumbnails需引入以下jar包

<dependency>
        <groupId>net.coobird</groupId>
	<artifactId>thumbnailator</artifactId>
        <version>0.4.8</version>
</dependency>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值