Python:data:image/png;base64图片编码解码

简介: Python:data:image/png;base64图片编码解码

编码后的内容,可以在浏览器中直接打开,提示:先去掉回车

data类型的Url大致有下面几种形式

data:,<文本数据>
data:text/plain,<文本数据>
data:text/html,<HTML代码>
data:text/html;base64,<base64编码的HTML代码>
data:text/css,<CSS代码>
data:text/css;base64,<base64编码的CSS代码>
data:text/javascript,<Javascript代码>
data:text/javascript;base64,<base64编码的Javascript代码>
data:image/gif;base64,base64编码的gif图片数据
data:image/png;base64,base64编码的png图片数据
data:image/jpeg;base64,base64编码的jpeg图片数据
data:image/x-icon;base64,base64编码的icon图片数据

Python3代码

# -*- coding: utf-8 -*-


import base64
import re
import uuid


def decode_image(src):
"""
解码图片
:param src: 图片编码
eg:
src="data:image/gif;base64,R0lGODlhMwAxAIAAAAAAAP///
yH5BAAAAAAALAAAAAAzADEAAAK8jI+pBr0PowytzotTtbm/DTqQ6C3hGX
ElcraA9jIr66ozVpM3nseUvYP1UEHF0FUUHkNJxhLZfEJNvol06tzwrgd
LbXsFZYmSMPnHLB+zNJFbq15+SOf50+6rG7lKOjwV1ibGdhHYRVYVJ9Wn
k2HWtLdIWMSH9lfyODZoZTb4xdnpxQSEF9oyOWIqp6gaI9pI1Qo7BijbF
ZkoaAtEeiiLeKn72xM7vMZofJy8zJys2UxsCT3kO229LH1tXAAAOw=="

:return: str 保存到本地的文件名
"""
# 1、信息提取
result = re.search("data:image/(?P<ext>.?);base64,(?P<data>.)", src, re.DOTALL)
if result:
ext = result.groupdict().get("ext")
data = result.groupdict().get("data")

else:
raise Exception("Do not parse!")

# 2、base64解码
img = base64.urlsafe_b64decode(data)

# 3、二进制文件保存
filename = "{}.{}".format(uuid.uuid4(), ext)
with open(filename, "wb") as f:
f.write(img)

return filename


def encode_image(filename):
"""
编码图片
:param filename: str 本地图片文件名
:return: str 编码后的字符串
eg:
src="data:image/gif;base64,R0lGODlhMwAxAIAAAAAAAP///
yH5BAAAAAAALAAAAAAzADEAAAK8jI+pBr0PowytzotTtbm/DTqQ6C3hGX
ElcraA9jIr66ozVpM3nseUvYP1UEHF0FUUHkNJxhLZfEJNvol06tzwrgd
LbXsFZYmSMPnHLB+zNJFbq15+SOf50+6rG7lKOjwV1ibGdhHYRVYVJ9Wn
k2HWtLdIWMSH9lfyODZoZTb4xdnpxQSEF9oyOWIqp6gaI9pI1Qo7BijbF
ZkoaAtEeiiLeKn72xM7vMZofJy8zJys2UxsCT3kO229LH1tXAAAOw=="

"""
# 1、文件读取
ext = filename.split(".")[-1]

with open(filename, "rb") as f:
img = f.read()

# 2、base64编码
data = base64.b64encode(img).decode()

# 3、图片编码字符串拼接
src = "data:image/{ext};base64,{data}".format(ext=ext, data=data)
return src


if name == '__main__':
# 下载百度首页logo保存到本地 baidu.png
# https://www.baidu.com/img/bd_logo1.png

# 编码测试
print(encode_image("baidu.png"))
# src = "data:image/png;base64,iVBORw0KGgoAAAA..."

# 解码测试
# print(decode_image(src))

参考

python解码data:image开头的图片地址

            </div>
目录
相关文章
Debian 官方源换为国内的源的操作方法
apt-get update 报错,采用更换源的方式解决问题。
57569 0
|
安全 Java 网络虚拟化
隐藏 IP 地址调用外部接口:探索与实践
隐藏 IP 地址调用外部接口:探索与实践
418 0
|
前端开发 JavaScript Java
计算机Java项目|基于Spring Boot的宠物咖啡馆平台的设计与实现
计算机Java项目|基于Spring Boot的宠物咖啡馆平台的设计与实现
459 0
|
12月前
|
存储 运维 前端开发
同城圈子搭子交友论坛系统/搭建圈子系统的常见问题
需求分析不明确 在系统设计初期,如果未能充分理解目标用户的需求,可能导致系统功能与实际需求脱节,进而影响用户体验。 解决方案:通过市场调研、用户访谈、问卷调查等方式深入了解用户需求,确保系统设计符合用户期望。 技术选型困难 选择合适的技术栈对于系统的稳定性和可扩展性至关重要。技术选型不当可能导致系统性能低下或开发周期延长。 解决方案:根据系统需求、开发团队的技术栈以及未来扩展性等因素综合考虑,选择适合的技术栈。例如,前端可以使用uinapp 等框架,后端可以选择PHP框架,数据库可以选择MySQL等。
421 0
|
缓存 Docker 容器
在Docker中,docker commit生成的镜像和dockerfile生成镜像有什么区别?
在Docker中,docker commit生成的镜像和dockerfile生成镜像有什么区别?
|
SQL NoSQL 关系型数据库
推荐3款免费且实用的数据库管理工具
推荐3款免费且实用的数据库管理工具
894 2
|
存储 Web App开发 Android开发
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
1268 1
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
|
存储 C语言
C语言程序设计——ASCII码
C语言程序设计——ASCII码
|
缓存 Kubernetes Cloud Native
赛题解析 | 初赛赛道一:实现一个分布式统计和过滤的链路追踪
任何节点出现符合采样条件的链路数据,那就需要把这个请求的所有链路数据采集。即使这些链路数据在这个链路节点之前或者之后产生,即使这些链路数据在分布式系统的成百上千台机器上。
1855 55
赛题解析 | 初赛赛道一:实现一个分布式统计和过滤的链路追踪
|
弹性计算 开发者
阿里云服务器2核2G最新收费标准价格与选择参考
2023年阿里云服务器2核2G配置有多款实例规格可选,不同实例规格云服务器收费标准是不同的,目前2核2G配置收费标准最低的是突发性能实例 t6实例,收费标准为34.0/月,如果通过目前阿里云官网的活动购买2核2G配置云服务器,有轻量应用服务器、经济型e、通用算力型u1实例可选,最低价格为108元1年。本文为大家详细介绍2023年阿里云服务器2核2G最新收费标准与活动价格。
阿里云服务器2核2G最新收费标准价格与选择参考