今天写代码测试服务器程序时,客户端用 Python 将图片利用 Base64 编码传输到服务器,服务器语言是 PHP,再将 Base64 编码解码成图片。在实际测试中,服务器后面的代码总是无法进行,说无法识别图片(不支持此文件格式),最后发现其实是自己在测试中忽略了一个小问题,这里与大家分享下,如果你也有类似的问题,看看是不是犯了跟老王一样的错误。

一、问题描述与解决

客户端用的是 Python base64 包中的 b64encode 函数,服务器端用的是 PHP 中的 base64_decode 函数。

测试时,服务器端的 Python 算法中总是提示图片无法 identified,一开始我还以为是流传输中出了问题,图片流没有成功传到服务器,后来发现图片已经保存在中间文件夹中了,只不过无法正常查看打开,提示“似乎不支持此文件格式”:

因为用的 Base64 编码和解码都是 Python / PHP 自带的函数,所有加密和解密过程应该不会出错,后来再检查发现在写客户端测试脚本时加了前缀字符串 data:image/jpg;base64,,这个是适合任何在线 Base64 与图片互转工具生成的 Base64 编码都会有这个前缀,有这个前缀也就能直接作为 img 标签的 src 了,当时写 Python 测试代码的时候不知道哪里抽了一下,居然还手动加了这个前缀:

def read_image(self, filepath):

with open(filepath, "rb") as f:

base64_data = base64.b64encode(f.read())

self.body['image'] = "data:image/jpg;base64," + str(base64_data, 'utf-8')

删除这个前缀再传到服务器,发现解码后图片就能正常查看打开了。

以上就是老王这次遇到的通过 Base64 解码得到的图片无法打开查看问题的原因以及解决方法,其实很简单,但是一开始以为是流传输那里出问题了还调试了好久,如果你也遇到了类似的问题,不妨看看是不是自己的 Base64 字符串出了问题。

二、一些图片与 Base64 互转的代码

1、PHP

2、Python

with open(filepath, "rb") as f:

base64_data = base64.b64encode(f.read())

self.body['image'] = "data:image/jpg;base64," + str(base64_data, 'utf-8')

3、Java

BASE64Decoder decoder = new BASE64Decoder();

try {

FileOutputStream write = new FileOutputStream(new File(path

+ imgName));

byte[] decoderBytes = decoder.decodeBuffer(base64);

write.write(decoderBytes);

write.close();

} catch (IOException e) {

e.printStackTrace();

}

java base64转图片打不开_解决通过 Base64 解码得到的图片无法打开查看的问题相关推荐

  1. vue 动态获取的图片路径不显示_解决Vue动态加载本地图片问题

    最近遇到了个问题,用v-bind动态绑定img的src,图片加载不出来.控制台显示src是有获取到图片地址的,可是就是加载不出来. 最后才发现原因原来是浏览器中直接显示'./img/img1.png' ...

  2. 计算机word文档无法工作,word无法打开(WORD文档打不开_解决方法_电脑基础知识_IT/计算机_专业资料)...

    word无法打开(WORD文档打不开_解决方法_电脑基础知识_IT/计算机_专业资料),哪吒游戏网给大家带来详细的word无法打开(WORD文档打不开_解决方法_电脑基础知识_IT/计算机_专业资料) ...

  3. 计算机桌面的图片要点开才可以看,我的电脑直接双击图片打不开,需要右键开启方式里选择图片检视器才可以,请问有什么方法修改一下?...

    我的电脑直接双击图片打不开,需要右键开启方式里选择图片检视器才可以,请问有什么方法修改一下?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶 ...

  4. python图片转换成文字_使用Python脚本将文字转换为图片的实例分享

    有时候,我们需要将文本转换为图片,比如发长微博,或者不想让人轻易复制我们的文本内容等时候.目前类似的工具已经有了不少,不过我觉得用得都不是很趁手,于是便自己尝试实现了一个. 在 Python 中,PI ...

  5. 小米9私密相册怎么找_小米手机私密相册怎么用?怎么打开查看?

    伴随着新系统的更新,小米系统添加了一项特别人性化的功能--私密相册.相信有很多用户都和小编一样,碍于情面,不得不将手机借与他人使用,但是有一些比较私人的照片不希望被他们看到.这时候,私密相册就能很好地 ...

  6. java byte 图片浏览器直接显示_以Spring Boot的方式显示图片或下载文件到浏览器的示例代码...

    以Java web的方式显示图片到浏览器以Java web的方式下载服务器文件到浏览器 以Spring Boot的方式显示图片或下载文件到浏览器 请求例子:http://localhost:8080/ ...

  7. Java代码给csv文件加水印_如何给CSV数据包的图片批量加上水印

    批量加水印要用到加水印的工具了吧 一.发布产品的时候,你的图片传到网上去的时候,都有一个选项,是否要在图片上加水印,系统默认的都是加水印的,你只要不选否,都是加了的. 二.photoshop加水印 1 ...

  8. java上传过大图片超时_解决.net项目中上传的图片或者文件太大无法上传问题

    最近做项目的时候  用户提出要上传大图片  一张图片有可能十几兆  本来用的第三方的上传控件  有限制图片上传大小的设置 以前设置的是2M  按照用户的要求  以为直接将限制图片上传大小的设置改下就可 ...

  9. python requests html格式图片打不开_爬虫下载图片打不开是什么原因,最新简易爬虫教程...

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. (本文来自www.777n.com) 作者: GitPython (原文来 ...

  10. python提取图片文字视频教学_用Python提取视频中的图片

    小编自己码的通用型函数,支持各种常用视频格式,可满足常用需求,亲测效果和速度都不错. 想获取本文数据和完整代码的下载链接,请关注微信公众号"R语言和Python学堂",并回复发文日 ...

最新文章

  1. Spark 把RDD数据保存到hdfs单个文件中,而不是目录
  2. java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码
  3. html自定义工具条,为Autodesk Viewer添加自定义工具条的更好方法
  4. warning: the frame size of 1040 bytes is larger than 1024 bytes
  5. The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 XKC's basketball team
  6. python自学笔记_Python 自学笔记
  7. MySQL----数据的显示位宽
  8. 结构化编程 —— 顺序、分支(选择)、循环
  9. 【C++入门】C++ 运算符的重载
  10. PHP函数strcmp,PHP strcmp函数
  11. 想提高计算机ppt能力,相见恨晚的10个PPT制作小技巧!提高你的PPT制作效率
  12. 2019年华为JAVA面试题系列
  13. EasyAR4.0稀疏空间地图室内导航
  14. 程序设计基础之C语言计算职工工资
  15. 显卡服务器已停止响应,显卡驱动停止响应并已成功恢复问题,找到根本原因,彻底解决!...
  16. J3455基于OMV组建NAS
  17. linux基础命令 - ps
  18. 【阅读】Variational Adversarial Active Learning
  19. 东南大学计算机系考研难度,东南大学研究生好考吗 都有哪些专业
  20. U盘初始化程序对U盘做出的数据修改分析

热门文章

  1. word2010删除作者信息
  2. matlab 矩阵的数组平方和,MATLAB中的矩阵和数组
  3. Vijos 1004 伊甸园日历游戏 博弈
  4. bat运行Java程序
  5. 英语口语8级是这么炼成的!
  6. 《合作的进化》pdfmobiepub电子版
  7. 防火门行业研究及十四五规划分析报告
  8. 2021-07-15-2021年全球10大最佳单板计算机开发板(SBC)(第1-3名)
  9. 002 姜子牙留计不成,玄子清相府献计
  10. 国务院办公厅公布2011年部分节假日安排通知