软硬件环境

  • windows 10 64bits

  • anaconda with python 3.7

  • base64

  • flask 1.1.2

前言

图片处理是Python编程中需要掌握的基本技能,而python中也内置了相应的库,它就是base64。本篇就来分享如何利用base64库来将图片与字符串进行互相转换。

图片转成字符串

以我网站的logo图片为例

base64
import base64# 以rb方式读取图片文件,获得原始字节码,b是二进制的意思
with open("logo.jpg", 'rb') as jpg_file:byte_content = jpg_file.read()if byte_content:# 编码成base64字节码base64_bytes = base64.b64encode(byte_content)# 转换成字符串base64_string = base64_bytes.decode('utf8')print(base64_string)

程序执行结果是这样的

base64

如果需要将字符串通过JSON的方式进行传输的话,就可以结合json库一起操作了

字符串转换成图片

这种情况,图片数据一般都是json的方式传输,在接收端看到的就是编码后的字符串,拿到字符串后,就可以使用base64提供的解码方法解码并保存到本地,为了示例的完整性,这里使用2个外部工具,一个是在线的图片转换工具,网站地址是 https://www.base64-image.de/,上传一张图片得到base64编码后的字符串;另一个工具是postman,通过它模拟一个客户端的POST请求,而在服务器,我们利用flask框架实现一个后台服务,处理这个http请求

base64

在上图中,图片的数据是从标注的位置开始的,把这串字符拷贝下来,填充到postman中,如下所示

base64

这是一个POST请求,body中是一个json数据,格式是这样的

{"img":"图片base64编码字符串"}

然后在请求的Header部分,加上Content-Type字段,它的值为application/json,这样,客户端的部分就准备好了

base64

接下来,编写服务器端的代码,使用flask这个轻量级的web框架

from flask import Flask, request, jsonify
import base64app = Flask(__name__)@app.route('/', methods=['POST'])
def get_image():# 取出字符串image_base64_string = request.get_json()['img']print(image_base64_string)# 解码字符串image_data = base64.b64decode(image_base64_string)with open('test.jpg', "wb") as jpg_file:jpg_file.write(image_data)return jsonify({"code": 200})if __name__ == '__main__':app.run(port=3000, debug=True)

执行上述代码,启动flask服务

base64

然后来到postman,发送刚才准备好的http请求,可以看到,服务器端返回了json数据

base64

而此时,服务器端也成功地接收到了图片字符串并解码存储到了本地硬盘

base64

参考资料

  • https://en.wikipedia.org/wiki/Base64

Python实用模块(二十一)base64相关推荐

  1. python四大软件-Python实用模块(二十)Apscheduler

    软硬件环境 windows 10 64bits anaconda with python 3.7 视频看这里 前言 说起定时任务,第一反应应该是windows自带的计划任务或者linux自带的cron ...

  2. Python实用模块(二十二)easydict

    软硬件环境 windows 10 64bit anaconda3 with python 3.7 easydict 1.9 前言 easydict能够让我们使用.操作符,就像访问属性attribute ...

  3. Python入门(二十一)- 常见模块

    二十一.常见模块 上一章介绍了Python模块的相关知识,在实际开发中,Python的很多功能都已经有了成熟的第三方实现,一般不需要开发者"重复造轮子",当开发者需要完成某种功能时 ...

  4. Python实用模块

    哈喽 大家好! 我是一个无聊的人类,今天我找到了一些Python实用的模块,分享给大家. 上次看到有人给我起了个外号 有趣的人类 言归正传 开始我们的开始(其实是废话) 1.屏蔽脏话 编写一个Pyth ...

  5. python 日志输出为json格式文件_Py修行路 python基础 (二十一)logging日志模块 json序列化 正则表达式(re)...

    一.日志模块 两种配置方式:1.config函数 2.logger #1.config函数 不能输出到屏幕 #2.logger对象 (获取别人的信息,需要两个数据流:文件流和屏幕流需要将数据从两个数据 ...

  6. Python学习日记(二十一) 异常处理

    程序中异常的类型 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基 ...

  7. Python实用模块之pycurl

    软硬件环境 ubuntu 19.04 64bit anaconda3 with python 3.7.3 pycurl 7.43.0.2 简介 CURL是一个基于URL进行数据传输的命令行工具,使用C ...

  8. 【Python学习系列二十一】pandas库基本操作

    pandas很强大,操作参考官网:http://pandas.pydata.org/pandas-docs/stable/ 也有一份10分钟入门的材料:http://pandas.pydata.org ...

  9. Python Tricks(二十一)—— 排列组合的计算

    使用循环: 阶乘的实现: def fac(n):r = 1.for i in range(1, n+1):r *= ireturn r 排列:Anm=m!n!=(m−n+1)⋯mA_m^n=\frac ...

最新文章

  1. linux驱动:音频驱动(一)ALSA
  2. 阿里某p9哭穷:300万年薪,依然挣扎在温饱线上!
  3. java 常见中文乱码问题解决
  4. libSVM笔记之(一)在matlab环境下安装配置libSVM
  5. 【转】MVVM大比拼小结
  6. Spring AOP失效之谜
  7. Solr进阶之Solr综合文本相似度的多因素权重排序实现
  8. Things3 for mac(Mac任务管理神器)
  9. LINUX删除指定子目录下所有指定文件名
  10. mongodb的管理员和安全认证
  11. SQLServer数据库备份与还原
  12. 裁判文书网爬虫(2019.5.15更新)
  13. 管理科学与运筹学(MS/OR)国际期刊最新权威排名
  14. 政府应用系统应用解决方案
  15. 去掉右键烦人的多余菜单项
  16. Android 调用12306接口,聚合数据Android SDK 12306火车票查询订票演示示例 编辑
  17. Mac Android Studio Flutter环境配置之第一个Futter项目
  18. 基于卷积神经网络的手势识别研究论文
  19. 悠悠古舟渡,浅浅时光去
  20. 天大的本事,顶不上一张会说话的嘴

热门文章

  1. 2018年4月份自考总结
  2. Oracle 行列转换函数pivot使用
  3. 涪陵创新计算机学校是什么专业,重庆市涪陵创新计算机学校开展增材制造技术教学研讨会...
  4. sqlmap--分析---less-1
  5. traceroute命令用法
  6. 电子商务行业物流现状分析
  7. 红米2支持java吗_红米2a会有报错:java.lang.NullPointerException
  8. 用轻量服务器搭建在线协作绘图白板
  9. 七夕到了,你还单身吗?
  10. POJ3614 [USACO07NOV]防晒霜Sunscreen