Java踩坑笔记 —— base64转换为图片后图片显示不全
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转换为图片后图片显示不全相关推荐
- 「Java」基于Mirai的qq机器人开发踩坑笔记(其二)
目录 0. 配置机器人 1. onLoad方法 2. onEnable方法 3. 消息属性 4. 消息监听 I. 好友消息 II. 群聊消息 III. 无差别消息 5. 发送消息 I. 文本消息 II ...
- 「Java」基于Mirai的qq机器人开发踩坑笔记(其一)
目录 0. 前置操作 I. 安装MCL II. MCL自动登录配置 III. 安装IDEA插件 1. 新建Mirai项目 2. 编写主类 3. 添加外部依赖 4. IDEA运行 5. 插件打包 6. ...
- 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 ...
- iphone se 一代 不完美越狱 14.6 视频壁纸教程(踩坑笔记)
iphone se 一代 不完美越狱 14.6 加 视频壁纸教程-踩坑笔记 越狱流程 1.爱思助手制作启动u盘 坑点: 2.越狱好后 视频壁纸软件 1.源 2.软件安装 越狱流程 1.爱思助手制作启动 ...
- 阿里云部署Tiny Tiny RSS踩坑笔记
阿里云部署Tiny Tiny RSS踩坑笔记 前言 入坑了RSS,之前的配置是阿里云部署RSSHub,配合Inoreader进行文章阅读,详情见RSS入坑指南.阿里云部署RSSHub踩坑笔记.在202 ...
- 昆仑通态触摸屏1003故障码,踩坑笔记
昆仑通态触摸屏1003故障码,踩坑笔记 第一次使用这个昆仑通态触摸屏,使用modbusRTU与金田变频器做通讯. 触摸屏在线后报1003通讯错误代码,现象是控制指令正常,但是读取不正常.读取变频器状态 ...
- EDUSOHO踩坑笔记之四十二:资讯
EDUSOHO踩坑笔记之四十二:资讯 获取资讯列表信息 GET /articles/{id} 权限 老API,需要认证 参数 字段 是否必填 描述 sort string 否 排序,'created' ...
- uniapp引入vantweapp踩坑笔记
vue-cli创建uniapp项目引入vantweapp踩坑笔记 uni-app中引入vantweapp vue-cli创建uniapp项目引入vantweapp踩坑笔记 一.环境准备 二.项目搭建 ...
- Linux内核踩坑笔记
systemtap embedded C踩坑笔记戳这: https://blog.csdn.net/qq_41961459/article/details/103093912 task_struct的 ...
最新文章
- Python3编码与转码
- 学习 Spring (十三) AOP 配置
- Javascript 函数声明和函数表达式的区别
- 利用WOFF模糊和电报渠道进行通信
- spring中事务和传播属性配置代码
- 7-32 中位数 (10 分)
- Nginx+Php-fpm运行原理详解
- Linux 之父怒斥:一些“安全人士是TMD的白痴!”
- android表格布局介绍,TableLayout表格布局详解
- c语言实现校园疫情防控系统
- 嵌入式三级知识点整理
- BZOJ 1135 [POI2009]Lyz 线段树
- 外国人怎么样学计算机,适合外国人学中文的打字法
- c++重写卷积网络的前向计算过程,复现theano的测试结果
- mysql创建触发器
- STM32F105、107RB使用外部晶振8M时配置外设时钟为72M
- Redis缓存高可用集群
- Parsing error: No Babel config file detected for xxx Either disable config file checking...报错解决方法
- 好用到爆的Python自动化办公教程pdf,Python × Excel × Word × PPT 一次搞定
- 怎么看计算机属性XP,xp系统怎么看CPU的性能和型号
热门文章
- struct2cell
- pvcreate 创建物理卷PV
- 2 §1.1 一个数论经典结论证明剖析
- MySQL的排序规则
- Mathorcup数学建模竞赛第三届-【妈妈杯】A题:火车票购票网站优化(附带赛题解析获奖论文和MATLAB、C++代码)(三)
- 移动APP的崛起推动了智能手机飞跃发展
- MATLAB学习笔记/包含登陆界面的GUI制作与美化
- python文本分类汇总_用Python解决海量数据的分类汇总~一键化办公的神器!
- 计算机应知应会培训班,必知必会应知应会学习手册信号工定岗题库
- SOHO如何给产品定价?如何报价?