• 图片和base64编码字符串 互相转换,图片和byte数组互相转换


    1、图片和base64编码字符串 互相转换

    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
    
    import java.io.*;
    
    /**
     * @author lishupeng
     * @create 2017-05-06 下午 2:56
     **/
    public class Base64Test {
        public static void main(String[] args) {
            String strImg = GetImageStr();
            System.out.println(strImg);
            GenerateImage(strImg);
        }
    
        //图片转化成base64字符串
        public static String GetImageStr() {//将图片文件转化为字节数组字符串,并对其进行Base64编码处理
            String imgFile = "C:\Users\Administrator\Desktop\a\1.png";//待处理的图片
            InputStream in = null;
            byte[] data = null;
            //读取图片字节数组
            try {
                in = new FileInputStream(imgFile);
                data = new byte[in.available()];
                in.read(data);
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            //对字节数组Base64编码
            BASE64Encoder encoder = new BASE64Encoder();
            return encoder.encode(data);//返回Base64编码过的字节数组字符串
        }
    
        //base64字符串转化成图片
        public static boolean GenerateImage(String imgStr) {   //对字节数组字符串进行Base64解码并生成图片
            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;
            }
        }

    2、图片和byte数组互相转换

    import javax.imageio.stream.FileImageInputStream;
    import javax.imageio.stream.FileImageOutputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    
    /**
     * @author lishupeng
     * @create 2017-05-06 下午 3:48
     **/
    public class Image2Byte {
    
        public static void main(String[] args){
            byte[] data = image2byte("C:\Users\Administrator\Desktop\a\1.png");
            System.out.println(data.toString());
            byte2image(data,"d://222.jpg");
        }
    
        //图片到byte数组
        public static  byte[] image2byte(String path) {
            byte[] data = null;
            FileImageInputStream input = null;
            try {
                input = new FileImageInputStream(new File(path));
                ByteArrayOutputStream output = new ByteArrayOutputStream();
                byte[] buf = new byte[1024];
                int numBytesRead = 0;
                while ((numBytesRead = input.read(buf)) != -1) {
                    output.write(buf, 0, numBytesRead);
                }
                data = output.toByteArray();
                output.close();
                input.close();
            } catch (FileNotFoundException ex1) {
                ex1.printStackTrace();
            } catch (IOException ex1) {
                ex1.printStackTrace();
            }
            return data;
        }
    
        //byte数组到图片
        public static void byte2image(byte[] data, String path) {
            if (data.length < 3 || path.equals("")) return;
            try {
                FileImageOutputStream imageOutput = new FileImageOutputStream(new File(path));
                imageOutput.write(data, 0, data.length);
                imageOutput.close();
                System.out.println("Make Picture success,Please find image in " + path);
            } catch (Exception ex) {
                System.out.println("Exception: " + ex);
                ex.printStackTrace();
            }
        }
    
        //byte数组到16进制字符串
        public String byte2string(byte[] data) {
            if (data == null || data.length <= 1) return "0x";
            if (data.length > 200000) return "0x";
            StringBuffer sb = new StringBuffer();
            int buf[] = new int[data.length];
            //byte数组转化成十进制
            for (int k = 0; k < data.length; k++) {
                buf[k] = data[k] < 0 ? (data[k] + 256) : (data[k]);
            }
            //十进制转化成十六进制
            for (int k = 0; k < buf.length; k++) {
                if (buf[k] < 16) sb.append("0" + Integer.toHexString(buf[k]));
                else sb.append(Integer.toHexString(buf[k]));
            }
            return "0x" + sb.toString().toUpperCase();
        }
    }
  • 相关阅读:
    mysql读写分离
    mysql主从同步
    mysql修改密码
    mysql单机安装以及语法,alter表
    zabbix主动监控
    数据集
    K-近邻算法
    常规套路
    区分子类方法中重名的三种变量
    Java的数学工具类Math
  • 原文地址:https://www.cnblogs.com/jassy/p/8275589.html
Copyright © 2020-2023  润新知