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>
目录
相关文章
|
算法 前端开发 JavaScript
滑块验证码------啥?你居然还在手动滑动,你不来试试自动滑动吗
滑块验证码------啥?你居然还在手动滑动,你不来试试自动滑动吗
931 0
|
机器学习/深度学习 人工智能 自然语言处理
一文搞懂【知识蒸馏】【Knowledge Distillation】算法原理
一文搞懂【知识蒸馏】【Knowledge Distillation】算法原理
一文搞懂【知识蒸馏】【Knowledge Distillation】算法原理
|
SQL 测试技术 网络安全
[ 渗透工具篇 ] sqlmap 详解(一) sqlmap 安装详解
[ 渗透工具篇 ] sqlmap 详解(一) sqlmap 安装详解
2439 0
[ 渗透工具篇 ] sqlmap 详解(一) sqlmap 安装详解
|
6月前
|
存储 人工智能 自然语言处理
Cursor这类编程Agent软件的模型架构与工作流程
编程Agent的核心是一个强大的大语言模型,负责理解用户意图并生成相应的代码和解决方案。这些模型通过海量文本和代码数据的训练,掌握了广泛的编程知识和语言理解能力。
559 1
|
前端开发 rax Shell
Shellcode Injection(√)
Shellcode Injection(√)
274 0
|
机器学习/深度学习 人工智能 文字识别
文本,文字识别02----PaddleOCR基础概念及介绍,安装和使用,人工智能是一种使计算机模仿人类的一种技术,PaddleOCR的安装地址-https://www.paddlepaddle.org
文本,文字识别02----PaddleOCR基础概念及介绍,安装和使用,人工智能是一种使计算机模仿人类的一种技术,PaddleOCR的安装地址-https://www.paddlepaddle.org
|
网络协议 安全 Ubuntu
7 个有用的免费 Linux 网络隧道
【7月更文挑战第4天】
1510 0
7 个有用的免费 Linux 网络隧道
|
数据安全/隐私保护
ev4a/ev6/ev8/evs/evpalyer2加密视频去水印翻录录屏教程
遇到.ev4a/.ev6/.ev8/.evs格式视频无法正常播放,及录屏时出现黑屏问题?本教程教你轻松解决!首先确保你已获得播放授权简要流程:1) 使用指定播放器打开加密视频;2) 运行破解工具解除录屏限制;3) 使用推荐工具完成录屏。快速转换为MP4格式,让你的视频分享无忧!请注意合法合规使用。
|
小程序
【微信小程序】-- 全局配置 -- tabBar(十七)
【微信小程序】-- 全局配置 -- tabBar(十七)
【微信小程序】-- 全局配置 -- tabBar(十七)
|
存储 自然语言处理 数据可视化
低代码平台浅析:JNPF快速开发平台
低代码平台浅析:JNPF快速开发平台
790 0