Java封装BufferedImage与base64互转方法

一、BufferedImage转base64 


 
 /**
     * BufferedImage 编码转换为 base64
     * @param bufferedImage
     * @return
     */
    private static String BufferedImageToBase64(BufferedImage bufferedImage) {
        ByteArrayOutputStream bao = new ByteArrayOutputStream();//io流
        try {
            ImageIO.write(bufferedImage, "png", bao);//写入流中
        } catch (IOException e) {
            e.printStackTrace();
        }
        byte[] bytes = Base64.getEncoder().encode(bao.toByteArray());
        String base64 = new String(bytes);
        base64 = base64.replaceAll("\n", "").replaceAll("\r", "");//删除 \r\n
        return "data:image/png;base64," + base64;
    }

二、base64转BufferedImage

导包

import java.util.Base64;
import java.util.Base64.Decoder;
/**
     * base64 编码转换为 BufferedImage
     * @param base64
     * @return
     */
    public static BufferedImage base64ToBufferedImage(String base64) {
       Decoder decoder = Base64.getDecoder();
        try {
            byte[] byteArray = decoder.decode(base64);
            ByteArrayInputStream bai = new ByteArrayInputStream(byteArray);
            return ImageIO.read(bai);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

三、调用示例

3.1 调用BufferedImage转base64方法

controller代码

@GetMapping(value = "/testImg")
    @ResponseBody
    public String testImg(){
        return JSON.toJSONString(new CommonView("200","成功",imgService.testBannerImg()));
    }

service代码

public String testBannerImg() {
        BufferedImage banner = null;
        try {
          banner = ImageIO.read(new File("F:\\Img\\ghost_K\\bj9.png"));//本地背景图
          BufferedImage code = ImageIO.read(new URL("https://*********************"));//二维码
            code = resizeImage(code, 360, 360);//调整图片大小
            if (banner == null || code == null) {
                return null;
            }
            Graphics2D g = banner.createGraphics();
            int x = 250;    //x轴偏移
            int y = 375;   //y轴偏移
            g.drawImage(code, x, y, code.getWidth(), code.getHeight(), null);
            g.dispose();
            String base64 = BufferedImageToBase64(banner);//调用转base64方法
            return base64;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

运行结果

3.1 调用base64转BufferedImage

controller代码

由于base64数据过长,所以直接使用http请求刚才生成的结果转成JSON数据获取base64数据

    @GetMapping(value = "/testImg2")
    public Object testImg2(HttpServletResponse response){
        String urlResult = HttpUtil.get("http://localhost:9080/test/testImg");
        JSONObject jsonObject = JSONObject.parseObject(urlResult);
        Object base64 = jsonObject.get("data");
        BufferedImage bufferedImage = imgService.testBannerImg2(base64.toString());
        try {
            ImageIO.write(bufferedImage, "png", response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

service代码

public BufferedImage testBannerImg2(String base64) {
        return base64ToBufferedImage(base64);//调用base64转BufferedImage
    }

注意点

        直接调用ImageIO.write(bufferedImage, "png", response.getOutputStream());输出图片时base64中不能包含"data:image/png;base64,",否则会报IllegalArgumentException: Illegal base64 character 3a这个错误。

错误原因:base64 编码中存在 data:image/png;base64,

运行结果,成功解析出图片

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值