本地图片 转 Base64位 进行下载

486 阅读2分钟

主要分为: ①图片上传后,进行Base64位编码 ②图片进行Base64解码后,再进行下载(否则能下载文件,文件显示错误) ③图片转成Base64位,计算图片的大小(两个方法:一个处理头部的杂乱的数据,另外一个清除== 号的) (jar包在文末)


public class Test {
    public static void main(String[] args) {
        File file = new File("D:\BaiduNetdiskDownload\test1\1.jpg");
        System.out.println("初始图片的大小[字节]:" + file.length());//38,839 字节 > 37.9 KB
        String base64Img = imgToBase64(file.toString());
        System.out.println("base64位后图片的大小[字节]: " + base64Img.length());//53150

        //查看Base64位后的图片
        System.out.println(base64Img);


        //查看Base64位图片的大小
        System.out.println("base64位图片的大小[kb]:" + obtainImageSize1(base64Img));
        System.out.println("base64位图片的大小[kb]:" + obtainImageSize2(base64Img));


        //下载这个文件
        System.out.println(downloadBase64Img(base64Img));//38,839 字节 > 37.9 KB

    }

    //Base64位图片解码后,再进行下载
    public static String downloadBase64Img(String base64Img) {
        FileOutputStream outputStream = null;
        //解码操作
        BASE64Decoder base64Decoder = new BASE64Decoder();
        try {
            outputStream = new FileOutputStream(new File("D:\666.jpg"));
            //对文件进行解码操作
            byte[] bytes = base64Decoder.decodeBuffer(base64Img);
            outputStream.write(bytes);
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {
            System.out.println("下载失败");
            e.printStackTrace();
        }
        return "下载成功";
    }

    //读取图片后 进行Base64编码
    public static String imgToBase64(String imgPath) {
        InputStream inputStream = null;
        byte[] data = null;
        try {
            inputStream = new FileInputStream(imgPath);
            data = new byte[inputStream.available()];
            inputStream.read(data);
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //字节数组进行Base64编码
        BASE64Encoder encoder = new BASE64Encoder();
        //返回Base64编码过后的字节数组字符串
        return encoder.encode(data);
    }

    //查看Base64位图片的大小,头部处理
    public static int obtainImageSize1(String imageBase) {
        String str = imageBase;
        //处理头部的东西,注意,逗号也必须去除。
        str = str.replace("data:image/png;base64,", "");
        str = str.replace("=", "");
        //这里计算出来的是字节大小 也即是B
        int size = (str.length() - (str.length() / 8) * 2);
        //除以1024 得到的就是KB的大小了
        return size / 1024;
    }

    //imageBase就是要传来的图片数据 因为我传来的照片头部已经去掉了,所以这里就不需要再做处理,只做“=”号的处理就可以了
    public static int obtainImageSize2(String imageBase) {
        String str = imageBase;
        str = str.replace("=", "");
        //这里计算出来的是字节大小 也即是B
        int size = (str.length() - (str.length() / 8) * 2);
        //除以1024 得到的就是KB的大小了
        return size / 1024;
    }

}

jar 包链接如下:
https://pan.baidu.com/s/1QjINa3B-tnmzsXAlTOWsPg
提取码:qh5f