介绍

图片在网络上,通常以二进制文件传输,但是可不可以用纯文本传输图片呢?答案是肯定的。

本文就简要介绍一下 Python 的 base64 库。它可以将图片转换成字符串,也可以从字符串“变出”一个图片来。

图片转成字符串,并保存至 json

首先我们假设有这么一个图片 tower.jpg,我们想把它保存成文本形式,放到一个 json 文件里,然后发送到一个服务器程序。

# 导入相关的库

from sys import argv

from base64 import b64encode

from json import dumps

ENCODING = 'utf-8' # 指定编码形式

SCRIPT_NAME, IMAGE_NAME, JSON_NAME = argv # 获得文件名参数

# 读取二进制图片,获得原始字节码,注意 'rb'

with open(IMAGE_NAME, 'rb') as jpg_file:

byte_content = jpg_file.read()

# 把原始字节码编码成 base64 字节码

base64_bytes = b64encode(byte_content)

# 将 base64 字节码解码成 utf-8 格式的字符串

base64_string = base64_bytes.decode(ENCODING)

# 用字典的形式保存数据

raw_data = {}

raw_data["name"] = IMAGE_NAME

raw_data["image_base64_string"] = base64_string

# 将字典变成 json 格式,缩进为 2 个空格

json_data = dumps(raw_data, indent=2)

# 将 json 格式的数据保存到文件中

with open(JSON_NAME, 'w') as json_file:

json_file.write(json_data)

代码写好之后,将之保存为image_to_json.py。

使用方法:

python3 image_to_json.py tower.jpg tower.json

不出意外的话,会在当前目录得到一个名为tower.json的文件,打开后可以看到类似的数据:

{

"name": "tower.jpg",

"image_base64_string": "/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/.................."

}

"image_base64_string" 字段后面的字符串非常长,全部在一行内,有几十万甚至几千万个看不懂的字母。如果你的图片很大,比如 40M,那么这一行字符串很可能会让你的编辑器爆掉。

如果你需要将这个文件发送至一个服务器程序,可以使用类似的命令:

curl -vX POST http://xxx.xxx.xxx.xxx:80/api -d @tower.json --header "Content-Type: application/json"

这样发送一个 POST 请求后,设计好的后端服务器程序将可以直接读取 json 中的数据。

从 json 读取字符串,并转换成图片

获得 json 字符串之后,又可以将它原封不动地转成二进制文件。

from sys import argv

import base64

import json

# 从命令行获得文件名参数

SCRIPT_NAME, JSON_NAME, IMAGE_NAME = argv

# 读取 json 文件,并直接存入字典

with open(JSON_NAME, "r") as json_file:

raw_data = json.load(json_file)

# 从字典中取得图片的 base64 字符串,形如“YABgAAD/2wBDAAYEBQYFBAY....",

image_base64_string = raw_data["image_base64_string"]

# 将 base64 字符串解码成图片字节码

image_data = base64.b64decode(image_base64_string)

# 将字节码以二进制形式存入图片文件中,注意 'wb'

with open(IMAGE_NAME, 'wb') as jpg_file:

jpg_file.write(image_data)

代码写好后,保存为 json_to_image.py。

使用方法:

python3 json_to_image.py tower.json tower-new.jpg

这时在当前文件可以看到一个 tower-new.jpg 的图片文件,打开之后,会跟之前的图片一模一样。

Happy exploring!

如何将原图和json融合_用 base64 进行图片和字符串互转,并保存至 json相关推荐

  1. 如何将原图和json融合_图像语义分割出的json文件和原图,用plt绘制图像mask

    1.弱监督 由于公司最近准备开个新项目,用深度学习训练个能够自动标注的模型,但模型要求的训练集比较麻烦,,要先用ffmpeg从视频中截取一段视频,在用opencv抽帧得到图片,所以本人只能先用语义分割 ...

  2. 如何将原图和json融合_人脸融合接口

    人脸融合接口 0.1元/次 功能描述 使用本 API,可以对模板图和融合图中的人脸进行融合操作.融合后的图片中将包含融合图中的人脸特征,以及模板图中的其他外貌特征与内容,返回值是一段 JSON,包含融 ...

  3. 如何将原图和json融合_双曲知识嵌入:如何将知识“融合”带入新空间?

    知识图谱作为人类知识的结构化数据,是构建人工智能的基石.然而目前的知识图谱都是不完备的,所以需要将多个知识图谱融合以获得更完备的知识库.基于表示学习的知识关联作为知识图谱融合的新方法受到了许多关注.但 ...

  4. 脚本2—遍历文件夹下的图片进行检测,将结果保存成json格式predict_batch_tojson_一行_多行

    import matplotlib.image as im import matplotlib.pyplot as plt import os from PIL import Image import ...

  5. 微信小程序python后端json错误_微信小程序错误——mpvue小程序:未找到 app.json 中的定义的 pages pages/XXX/XXX 对应的 WXML 文件...

    iOS 图形处理 Core Graphics Quartz2D 教程 Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎.它提供了低级别.轻量级.高 ...

  6. mvc json 乱码_你了解JSON吗?——Jackson、FastJson在SpringMVC中的简单使用

    原文参考分享自CSDN:你了解JSON吗?--Jackson.FastJson在SpringMVC中的简单使用_欢迎来到 Baret~H 的博客-CSDN博客 1. 什么是 JSON JSON(Jav ...

  7. python人脸融合_用Python玩人脸融合,想知道你未来孩子的长相?(附代码)

    这次花了点时间,将百度智能云里面的人脸识别功能与python结合,进行了一场实验.结果还是蛮有成就感的,过程也挺简单,不会复杂,说不定,你就能融合出你孩子的长相了耶~ 下面我们一起敲起键盘吧! # 好 ...

  8. hive处理json数据_(转)hive中解析json数组

    hive中解析一般的json是很容易的,get_json_object就可以了. 但如果字段是json数组,比如 [{"bssid":"6C:59:40:21:05:C4 ...

  9. 发布json数据_技术分享 | MySQL 8.0.17 GA 发布!

    昨日 MySQL 官网正式发布 8.0.17 / 5.7.27 / 5.6.45 三个(维护)版本,距离上一个 GA 版本(8.0.16)发布时隔仅 88 天! MySQL 各开发团队的博客网站,同一 ...

最新文章

  1. 自定义窗体设计器-控件测试
  2. Java入门(一):Hello World !
  3. 批量 ping 测试脚本(IP 扫描)
  4. About SCCM 2012 UDA(User Device Affinity)
  5. webstock php,workerman_connection
  6. Aspx页面javascript的几个trick
  7. monit监控mysql_monit监控工具(客户端)
  8. 【论文解读】一种新的涨分神器!构造code-switching增广数据进行fine-tuning!
  9. c语言中void 与0,C语言中的 (void*)0 与 (void)0
  10. Hbase下载、安装流程
  11. easyExcel添加背景水印
  12. 2022“美亚杯”第八届中国电子数据取证大赛-团队赛题目
  13. Trembling ! Java类的加载过程详解(加载验证准备解析初始化使用卸载)
  14. 群贤路附近哪有计算机学校,群贤路口附近展览馆、会展中心
  15. 2000元 组装车 思路
  16. 信息文档管理与配置管理
  17. JS之父再谈JS历史(一)
  18. 物致DIY:OpenMV4——比OpenMV3更快,更高,更强的图像识别DIY神器来了!
  19. php的封装继承多态,PHP封装、继承和多态
  20. avd修改dns方法(android studio 中修改虚拟机DNS)

热门文章

  1. NOX的使用之学习篇【一】
  2. 随想录(关于ucore)
  3. android 触摸事件 控制,Android笔记:触摸事件的分析与总结----TouchEvent处理机制
  4. xhr请求python_Python爬虫进阶必备!关于某电商网站的加密请求头!
  5. 多用户企业文件管理系统源码_设计项目管理系统,可以,并有必要
  6. 我们都在向前奔跑,只有它独自留在了22年的春天 —— 冬奥日记
  7. msvcp140.dll缺失
  8. Python爬虫之Cookie和Session(转载)
  9. 阅读Unity官方技术blog笔记
  10. RHEL下SendMail修改发邮箱地址