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

线上图片验证码性能优化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编码可以在一定程度上隐藏原始数据,但它并不提供任何加密功能。如果需要保护数据内容的安全,还需采用其他的加密技术。因为它的编码与解码过程是确定且公开的

相关文章:

  • html播放本地音乐
  • 【HDLbits--FSM续(二)】
  • 游戏引擎学习第138天
  • R语言的基础命令及实例操作
  • sqlmap:从基础用法到漏洞利用实战
  • Zookeeper学习
  • 前端到AI,LangChain.Js(五)
  • DeepSeek V3 源码:从入门到放弃!
  • CInternetToolbar::_CommonHandleFileSysChange函数分析之CReBar::_IDToIndex函数的作用
  • Yocto Linux 量产 BSP 镜像定制
  • C++中避免重复虚函数的三大解决方案:以卡牌游戏开发为例
  • ArcGIS Pro:轻松制作地震动画,洞察灾害动态
  • Kubernetes全解析:从容器编排到云原生霸主
  • Arcgis中添加脚本工具箱
  • Java后端大厂高频面经——Java基础
  • *VulnHub-FristiLeaks:1.3暴力解法、细节解法,主打软硬都吃,隧道搭建、寻找exp、提权、只要你想没有做不到的姿势
  • ​‌fpassthru($stream)‌ 是 PHP 中的一个函数​
  • 加速科技Flex10K-L测试机:以硬核创新重塑显示驱动芯片测试新标杆!
  • Ubuntu 24.04 配置ODBC连接ORACLE 11G数据库
  • 从零构建企业级财务分析数仓 | Hive建模实战
  • 微信小程序报价单/张北网站seo
  • 做外贸没有网站可以吗/腾讯与中国联通
  • 安徽做网站公司/武汉本地seo
  • 乌鲁木齐哪里有做网站的公司/电子商务营销的概念
  • 找人开发软件去什么网站/网站建设的基本
  • 网站备案 服务内容/站内免费推广有哪些