Base64编码显示图片---踩坑笔记

Java将图片转为base64编码

直入主题,先上代码

	/**
     * 获取图片的Base64编码字符串
     *
     * @param imgPath 文件路径
     * @return
     */
    public String getImgBase64(String imgPath) {
        // 将图片转为字节数组
        byte[] imgData = null;
        try {
            imgData = Files.readAllBytes(Paths.get(imgPath));
        } catch (IOException e) {
            log.error("Read file to byteArray failed. Error: {}", e);
        }

        // 对字节数组进行Base64编码
        String result = "";
        if (imgData != null) {
            // 使用JDK自带的Base64架包
            byte[] baseByte = Base64.getEncoder().encode(imgData);
            String base64 = new String(baseByte, StandardCharsets.UTF_8);
            result = BASE64_PREFIX + base64; // BASE64_PREFIX = "data:image/png;base64,"
        }
        return result;
    }
<img src="data:image/png;base64,......base64编码">

遇到的坑

前期看了篇老博客,自己也没有去研究目前有没有更好的替代方法,就直接用了,导致图片显示不出来,通过定位发现的问题的根源。
从旧代码看起(只关注差异点)

 String result = "";
 // 对字节数组进行Base64编码
 if (imgData != null) {
     BASE64Encoder encoder = new BASE64Encoder();
     String base64 = encoder.encode(imgData);
     result = BASE64_PREFIX + base64;
 }
  1. 旧代码使用BASE64Decoder转码,使用该工具的encode方法转码出来的字符串带有换行字符,导致前端显示出问题。
  2. 现在发现该工具类未来可能会被删掉,且性能不佳。
  3. 贴一篇大佬对Base64的解读(不是自己写的):Java 8新特性探究(十一)Base64详解.

扩展:css中硬编码base64的64优缺点

  1. 优点
    使用图片的base64编码来显示图片,可以节省一个http请求。如果是将图片存到静态资源文件下,则需要一个请求加载该图片。
    百度将logo存在静态资源目录下,需要一个请求获取图片:
    在这里插入图片描述
    谷歌加载放大镜:
    在这里插入图片描述
  2. 缺点
    对于较大的图片不适合使用base64编码,编码后字节大小增加1/3倍,css文件也会变大。
  3. 贴一篇前端使用base64的攻略(不是自己写的):玩转图片Base64编码
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值