Java踩坑笔记 —— base64转换为图片后图片显示不全

  • 前言
  • 解决思路
  • 案例代码
  • 结束语

前言

最近在开发项目中,发现base64转换图片时,出现了图片显示不全,例如如下这样

可以明显看到图片部分地区被遮挡

解决思路

显示图片有误的情况下,经过反复测试,发现字节长度有问题

明显可以发现解码后的长度比文件字节长度少了N个字节!

后面在反复调试时,发现是因为在输出流写入时的问题:

outputStream.write(base64Str.getBytes(StandardCharsets.UTF_8),0,len);

改写为:

 outputStream.write(base64Str.getBytes(StandardCharsets.UTF_8));


字节长度一致,图片无遮罩,问题解决

案例代码

OutPutStream

    public static void writeToBase64Image(byte[] fileBytes,String dir,String path){File file = new File(dir,path);try {FileOutputStream outputStream = new FileOutputStream(file);//打开输入流BASE64Encoder base64Encoder = new BASE64Encoder();String base = base64Encoder.encodeBuffer(fileBytes);String base64Str = base64Encoder.encode(fileBytes);System.out.println("base64长度:" + base.length());System.out.println("base642长度:" + base64Str.length());int len = fileBytes.length;outputStream.write(base64Str.getBytes(StandardCharsets.UTF_8));outputStream.close();}catch (Exception e) {e.printStackTrace();}}

InputStream

    public static File convertBase64ToImage(byte[] base64Byte,String name){File file = new File(name+".jpg");try {String baseImageSrc = new String(base64Byte);if(file.exists()){return file;}BASE64Decoder base64Decoder =new BASE64Decoder();byte[] imgByte = base64Decoder.decodeBuffer(baseImageSrc);System.out.println("解码后的长度:" + imgByte.length);FileOutputStream fileOutputStream = new FileOutputStream(file);fileOutputStream.write(imgByte,0,imgByte.length);fileOutputStream.flush();fileOutputStream.close();}catch (Exception e){e.printStackTrace();}return file;}

结束语

Java踩坑笔记 —— base64转换为图片后图片显示不全

  • 如果对你有帮助的话可以给我点赞收藏,十分感谢
  • 致力做学习笔记分享给大家
  • 可以转载 需标明 出处 本文链接。
  • 笔者一个开源项目:我的世界开服助手 希望大家可以点一下star

感谢你的观看。

Java踩坑笔记 —— base64转换为图片后图片显示不全相关推荐

  1. 「Java」基于Mirai的qq机器人开发踩坑笔记(其二)

    目录 0. 配置机器人 1. onLoad方法 2. onEnable方法 3. 消息属性 4. 消息监听 I. 好友消息 II. 群聊消息 III. 无差别消息 5. 发送消息 I. 文本消息 II ...

  2. 「Java」基于Mirai的qq机器人开发踩坑笔记(其一)

    目录 0. 前置操作 I. 安装MCL II. MCL自动登录配置 III. 安装IDEA插件 1. 新建Mirai项目 2. 编写主类 3. 添加外部依赖 4. IDEA运行 5. 插件打包 6. ...

  3. OpenCV4.0.1/4.0.0/3.4.2 + Contrib + Qt5.9 + CMake3.12.1编译及踩坑笔记、Qt5+OpenCV配置、代码验证、效果图、福利彩蛋

    Table of Contents 前言 Windows 10, OpenCV4.0.1, Qt5.9.3, CMake3.12.1, MinGW5.3.0 Windows 10, OpenCV4.0 ...

  4. iphone se 一代 不完美越狱 14.6 视频壁纸教程(踩坑笔记)

    iphone se 一代 不完美越狱 14.6 加 视频壁纸教程-踩坑笔记 越狱流程 1.爱思助手制作启动u盘 坑点: 2.越狱好后 视频壁纸软件 1.源 2.软件安装 越狱流程 1.爱思助手制作启动 ...

  5. 阿里云部署Tiny Tiny RSS踩坑笔记

    阿里云部署Tiny Tiny RSS踩坑笔记 前言 入坑了RSS,之前的配置是阿里云部署RSSHub,配合Inoreader进行文章阅读,详情见RSS入坑指南.阿里云部署RSSHub踩坑笔记.在202 ...

  6. 昆仑通态触摸屏1003故障码,踩坑笔记

    昆仑通态触摸屏1003故障码,踩坑笔记 第一次使用这个昆仑通态触摸屏,使用modbusRTU与金田变频器做通讯. 触摸屏在线后报1003通讯错误代码,现象是控制指令正常,但是读取不正常.读取变频器状态 ...

  7. EDUSOHO踩坑笔记之四十二:资讯

    EDUSOHO踩坑笔记之四十二:资讯 获取资讯列表信息 GET /articles/{id} 权限 老API,需要认证 参数 字段 是否必填 描述 sort string 否 排序,'created' ...

  8. uniapp引入vantweapp踩坑笔记

    vue-cli创建uniapp项目引入vantweapp踩坑笔记 uni-app中引入vantweapp vue-cli创建uniapp项目引入vantweapp踩坑笔记 一.环境准备 二.项目搭建 ...

  9. Linux内核踩坑笔记

    systemtap embedded C踩坑笔记戳这: https://blog.csdn.net/qq_41961459/article/details/103093912 task_struct的 ...

最新文章

  1. Python3编码与转码
  2. 学习 Spring (十三) AOP 配置
  3. Javascript 函数声明和函数表达式的区别
  4. 利用WOFF模糊和电报渠道进行通信
  5. spring中事务和传播属性配置代码
  6. 7-32 中位数 (10 分)
  7. Nginx+Php-fpm运行原理详解
  8. Linux 之父怒斥:一些“安全人士是TMD的白痴!”
  9. android表格布局介绍,TableLayout表格布局详解
  10. c语言实现校园疫情防控系统
  11. 嵌入式三级知识点整理
  12. BZOJ 1135 [POI2009]Lyz 线段树
  13. 外国人怎么样学计算机,适合外国人学中文的打字法
  14. c++重写卷积网络的前向计算过程,复现theano的测试结果
  15. mysql创建触发器
  16. STM32F105、107RB使用外部晶振8M时配置外设时钟为72M
  17. Redis缓存高可用集群
  18. Parsing error: No Babel config file detected for xxx Either disable config file checking...报错解决方法
  19. 好用到爆的Python自动化办公教程pdf,Python × Excel × Word × PPT 一次搞定
  20. 怎么看计算机属性XP,xp系统怎么看CPU的性能和型号

热门文章

  1. struct2cell
  2. pvcreate 创建物理卷PV
  3. 2 §1.1 一个数论经典结论证明剖析
  4. MySQL的排序规则
  5. Mathorcup数学建模竞赛第三届-【妈妈杯】A题:火车票购票网站优化(附带赛题解析获奖论文和MATLAB、C++代码)(三)
  6. 移动APP的崛起推动了智能手机飞跃发展
  7. MATLAB学习笔记/包含登陆界面的GUI制作与美化
  8. python文本分类汇总_用Python解决海量数据的分类汇总~一键化办公的神器!
  9. 计算机应知应会培训班,必知必会应知应会学习手册信号工定岗题库
  10. SOHO如何给产品定价?如何报价?