当前位置: 首页 > article >正文

线上图片验证码性能优化base64编码

背景

项目中发现,img标签中写src,读取一个png图片,只有16kb,速度特别慢。图片是以https链接的方式请求的。

解决办法

将图片url链接转为base64编码格式,然后返回给前端,速度提升特别快。

定义:base64是一种基于64个可打印字符(A-Z、a-z、0-9、+、/)来表示二进制数据的表示方法,末尾用=做后缀。

原代码

byteArrayOutputStream = new ByteArrayOutputStream();
ImageIO.write(imageCode.getImage(), "jpeg", byteArrayOutputStream);
String fileName = UUID.randomUUID() + ".jpeg";

ResponseEntity<String> upload = fileUploadAndDownLoadService.upload(byteArrayOutputStream.toByteArray(), fileName);
JSONObject body = new JSONObject(upload.getBody());
JSONObject data = new JSONObject(body.get("data"));

TempFile tempFile = new TempFile();
tempFile.setFileName(fileName);
tempFile.setFileUrl(data.get("url").toString());
            tempFile.setFileType(fileName.substring(fileName.lastIndexOf(".") + 1));
tempFile.setDeleteStatus(0);
tempFile.setCreateTime(new Date());
tempFileMapper.insertSelective(tempFile);
return tempFile.getFileUrl();

优化后代码

byteArrayOutputStream = new ByteArrayOutputStream();
ImageIO.write(imageCode.getImage(), "jpeg", byteArrayOutputStream);
            
// 获取图片的字节数组
byte[] imageBytes = byteArrayOutputStream.toByteArray();
// 将字节数组转换为 Base64 字符串
String base64Image = Base64.getEncoder().encodeToString(imageBytes);
           
String fileName = UUID.randomUUID() + ".jpeg";
//ResponseEntity<String> upload = fileUploadAndDownLoadService.upload(byteArrayOutputStream.toByteArray(), fileName);
//JSONObject body = new JSONObject(upload.getBody());
//JSONObject data = new JSONObject(body.get("data"));

TempFile tempFile = new TempFile();
tempFile.setFileName(fileName);
//tempFile.setFileUrl(data.get("url").toString());
tempFile.setFileUrl(fileName);
            tempFile.setFileType(fileName.substring(fileName.lastIndexOf(".") + 1));
tempFile.setDeleteStatus(0);
tempFile.setCreateTime(new Date());
tempFileMapper.insertSelective(tempFile);

//return tempFile.getFileUrl();
return base64Image;

Base64 的应用场景包括:

常用于在 HTTP 协议中传输二进制数据。例如音乐文件里面保存一张封面图片,就是通过 base64 来进行保存。就是把一张图片或文件,变成一串字符串,这样就可以直接把这个字符串保存到数据库中,这种编码通常用于在网络中传输二进制数据,如图片或文件。

base64对于前端来说并不陌生,在性能优化方面,base64经常被用于小图片的转化,从而达到减少http请求,使得页面的性能变得越来越好。

优点

因为它可以避免数据在不同系统间传输时被误解或破坏;
同时无需借用一个空间进行存储,然后再通过地址获取到这个图片或者文件资源。

缺点

通过base64转化后,体积会大了 1/3 。
虽然Base64编码可以在一定程度上隐藏原始数据,但它并不提供任何加密功能。如果需要保护数据内容的安全,还需采用其他的加密技术。因为它的编码与解码过程是确定且公开的


http://www.kler.cn/a/574277.html

相关文章:

  • 数据结构与算法 计算机组成 八股
  • Ollama+Deepseek-R1+Continue本地集成VScode
  • 什么是全栈?
  • 基于海思soc的智能产品开发(芯片sdk和linux开发关系)
  • Linux安装Redis以及Redis三种启动方式
  • 深入解析 supervision 库:功能、用法与应用案例
  • 基于HAproxy搭建负载均衡
  • 前缀和的利用 前缀和的扩展问题
  • 如何用HTML5 Canvas实现电子签名功能✍️
  • P8707 [蓝桥杯 2020 省 AB1] 走方格
  • 【智能体架构:Agent】LangChain智能体类型ReAct、Self-ASK的区别
  • 鸿蒙Android4个脚有脚线
  • 道可云人工智能每日资讯|亚马逊云业务部门成立智能体人工智能团队
  • Unity3D WebGL内存优化与缓存管理
  • 使用jcodec库,访问网络视频提取封面图片上传至oss
  • [BD青训项目]介绍
  • vue3中子组件获取父组件的name,父组件不做修改动作
  • 算法探秘:盛最多水的容器问题
  • Oracle数据导入导出小工具(主要用于导入导出小批量含大字段的数据)
  • 快速启动 vue 开发环境