前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【java基础】 图片和base64字符串互转

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

作者头像
用户5640963
发布2019-07-25 14:34:22
1.3K0
发布2019-07-25 14:34:22
举报
文章被收录于专栏:卯金刀GG卯金刀GG

1、代码

代码语言:javascript
复制
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);  
        }
        
  }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档