文档章节

【java基础】 图片和base64字符串互转

卯金刀GG
 卯金刀GG
发布于 2018/02/06 18:01
字数 477
阅读 127
收藏 0

1、代码

package com.zsxy.util;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import javax.imageio.ImageIO;

import org.junit.Test;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
 *  图片与base64字符串互转
 */
@SuppressWarnings("all")
public class Pic_transform {

	@Test
	public void test01(){
		String data = GetImageStrFromPath("D:///24642e2a87de4b12039c9bdeb80e708b.jpg");
		System.out.println(data);
		GenerateImage(data);
		
	}
	public static String getURLImage(String imageUrl,String host,String referer,String cookie){  
        URL url;
        String data = null ;
		try {
			url = new URL(imageUrl);
		
        HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
        conn.addRequestProperty("Host",host);
        conn.addRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0");
        conn.addRequestProperty("Accept","image/png,image/*;q=0.8,*/*;q=0.5");
        conn.addRequestProperty("Accept-Language","zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");
        conn.addRequestProperty("Accept-Encoding","gzip, deflate");
        conn.addRequestProperty("Referer",referer);
        conn.addRequestProperty("Cookie",cookie);
        conn.addRequestProperty("Connection","keep-alive");
        conn.addRequestProperty("Pragma","no-cache");
        conn.addRequestProperty("Cache-Control","no-cache");
        conn.setRequestMethod("GET");  
        conn.setConnectTimeout(20 * 1000);
        InputStream input = conn.getInputStream();  

        //data = GetImageStrByInPut(input) ;
        data = GetImageStrFromUrl(input);
//        GenerateImage(data);


	
   
	} catch (MalformedURLException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}
		return data;  
	}
		
    	  /** 
         * 璇诲彇杈撳叆娴�,杞崲涓築ase64瀛楃涓� 
         * @param input 
         * @return 
         */  
        public static String GetImageStrByInPut(InputStream in) {
        	String imgBase64 = "";
        	try {
        		BufferedImage bufferedImage = ImageIO.read(in);
        		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        		ImageIO.write(bufferedImage,"jpg",outputStream);
        		byte[] outByteArray = outputStream.toByteArray();
        		BASE64Encoder encoder = new BASE64Encoder();
        		Thread.sleep(1000);
        		imgBase64 = encoder.encode(outByteArray);
        	}catch(IllegalArgumentException ie){
//        		ie.printStackTrace();
        		System.out.println("IllegalArgumentException");
        		 GetImageStrByInPut(in);
        	} catch (Exception e) {
        		e.printStackTrace();
        	}
        	//return imgBase64.replace("[ ]+","").replace(" ", "").replaceAll("\r|\n","").trim();
        	return imgBase64;
        }
        /**
         * 测试,base64字符串转图片
         * @param imgStr
         * @return
         */
        public static boolean GenerateImage(String imgStr) {  
            if (imgStr == null) // 图像数据为空  
                return false;  
            BASE64Decoder decoder = new BASE64Decoder();  
            try {  
                // Base64解码  
                byte[] b = decoder.decodeBuffer(imgStr);  
                for (int i = 0; i < b.length; ++i) {  
                    if (b[i] < 0) {// 调整异常数据  
                        b[i] += 256;  
                    }  
                }  
                // 生成jpeg图片  
                String imgFilePath = "d://222.jpg";  
                OutputStream out = new FileOutputStream(imgFilePath);  
                out.write(b);  
                out.flush();  
                out.close();  
                return true;  
            } catch (Exception e) {  
                return false;  
            }  
        } 
        /**
         * 本地图片转base64字符串
         * @param imgPath
         * @return
         */
        public static String GetImageStrFromPath(String imgPath) {  
            InputStream in = null;  
            byte[] data = null;  
            // 读取图片字节数组  
            try {  
                in = new FileInputStream(imgPath);  
                data = new byte[in.available()];  
                in.read(data);  
                in.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
            // 对字节数组Base64编码  
            BASE64Encoder encoder = new BASE64Encoder();  
            // 返回Base64编码过的字节数组字符串  
            return encoder.encode(data);  
        }
        /**
         * 流转base64字符串
         * @param inStream
         * @return
         */
        public static String GetImageStrFromUrl(InputStream inStream) {  
            byte[] data = null;  
            try {  
                data = new byte[inStream.available()];  
                inStream.read(data);  
                inStream.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
            // 对字节数组Base64编码  
            BASE64Encoder encoder = new BASE64Encoder();  
            // 返回Base64编码过的字节数组字符串  
            return encoder.encode(data);  
        }
        
  }

    

 

© 著作权归作者所有

卯金刀GG
粉丝 26
博文 265
码字总数 72868
作品 0
昌平
程序员
私信 提问
图片处理工具--xice7-imageKit

xice7-imageKit是基于java语言实现的简单的图片处理工具。 使用简单, API采用易用的管道流设计。 工程很小,且不依赖第三方Jar文件。 支持多种图片效果处理,如: 图片压缩 -支持各种类型的图片...

不愿透露姓名的Mr成
2017/05/17
1K
2
Android 开发人员不得不收集的代码 (持续更新中)

README of English 为方便查找,已进行大致归类,其目录如下所示: Activity相关→ActivityUtils.java→Demo isActivityExists : 判断是否存在Activity launchActivity : 打开Activity getL...

android框架安卓
2018/06/28
0
0
分享一个帮助类(不断完善中...)

博客园潜水了有两年多,现在想分享一个可以说是帮助类吧。 我们在编写程序的过程中,经常会用到一些方法,我只是把这些方法整合一下,方便使用,目前有md5,sha1,aes加解密,身份证验证,敏...

大树老周
2018/08/07
0
0
用Vue来实现图片上传多种方式

项目中需要上传图片可谓是经常遇到的需求,本文将介绍 3 种不同的图片上传方式,在这总结分享一下,有什么建议或者意见,请大家踊跃提出来。 没有业务场景的功能都是耍流氓,那么我们先来模拟...

huangjincq
2018/07/17
0
0
JSP--Base64图片字符串转图片

Base64图片字符串转图片 一,问题描述 也许是很久很久没有去研究 HTML 了吧,很早前就已经流行 HTML5 了,这让我这个 小小白,都不知道咋玩耍了,今天我们来记录下,如何在页面把一个图片的 ...

fajor
2016/06/23
252
2

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部