当前位置: 首页 > news >正文

python对图片或文件的操作

一. base64 与图片的相互转换

1. base64 转图片

import base64
from io import BytesIO
from PIL import Image# base64 编码的图像数据(示例)
base64_data = "iVBn9DHASKJDjDsdSADSf8lgg=="# 将 base64 编码的字符串解码为二进制数据
binary_data = base64.b64decode(base64_data)# 将二进制数据转换为 BytesIO 对象
bytes_io = BytesIO(binary_data)# 使用 PIL(Pillow)加载图像
image = Image.open(bytes_io)# 保存图像
image.save("output_image.png")print("图像保存成功")

2.图片转 base64

import base64def file_to_base64(file_path):with open(file_path, "rb") as file:# 读取文件内容file_data = file.read()# 使用base64编码base64_encoded = base64.b64encode(file_data)# 将bytes对象转换为字符串base64_string = base64_encoded.decode("utf-8")return base64_string# 示例:将图片转换为Base64编码
image_path = "D:/output_image.png"base64_data = file_to_base64(image_path)# 打印Base64编码
print(base64_data)

二.图片和像素点的操作

1. 读取图片的像素点矩阵, 写入到 json 文件中

jpg 一般为3通道, png 一般为 4通道

"""
读取图片像素点矩阵, 写入到json文件
"""
from PIL import Image
import numpy as np
import json# 打开图片
img = Image.open('D:/input_image.png')# 获取图片大小和格式
print(img.size, img.format)# 显示图片
# img.show()# 获取像素数据
pixels = np.array(img)# 将像素点转为 list 写入文件
file_object = open('D:/why.json', 'w', encoding="utf8")
json.dump(pixels.tolist(), file_object, ensure_ascii=False)

2.读取像素矩阵, 生成图片

"""
读取像素点矩阵, 生成图片
"""
import json
import numpy as np
import cv2file_object = open("D:/why.json", "r+", encoding='utf8')
file_data_str = file_object.read()
file_object.close()matrix_data = json.loads(file_data_str)image = np.array(matrix_data, dtype=np.uint8)
print(image.shape)cv2.imwrite("D:/output_image2.jpg", image)

三.本地文件和二进制的互相转换

1.本地文件转二进制


# 本地文件转二进制
def file_binary(path):with open(path, 'rb') as file:binary_data = file.read()return binary_datafile_path = "D:/input_image.png"
binary = file_binary(file_path)

2.二进制转本地文件


# 本地文件转二进制
def file_binary(path):with open(path, 'rb') as file:binary_data = file.read()return binary_data# 二进制写入到本地文件
def save_binary_file(path, binary_data):# 将二进制数据写入文件with open(path, "wb") as file:file.write(binary_data)file_path = "D:/input_image.png"
binary = file_binary(file_path)to_file_path = "D:/output_image.png"
save_binary_file(to_file_path, binary)

四.计算文件的 md5

1.计算本地文件的 md5

import hashlib# 计算本地文件的 md5 值
def calculate_md5(path):# 打开图像文件with open(path, "rb") as f:# 读取图像数据binary_data = f.read()# 计算 MD5 值md5_hash = hashlib.md5(binary_data)md5_value = md5_hash.hexdigest()return md5_value# 图像文件路径
file_path = "D:/output_image.png"# 获取图像的 MD5 值
md5 = calculate_md5(file_path)
print(md5)

2.计算数据二进制的 md5

跟计算本地文件的md5差不多, 只不过传入的是二进制数据而已, 二进制数据除了是从文件中直接读取的, 也有可能是从数据库中获取, 比如 mongo, 所以也要注意一下编码问题。

import hashlib# 本地文件转二进制
def file_binary(path):with open(path, 'rb') as file:binary_data = file.read()return binary_data# 计算二进制数据的 md5
def calculate_md5(binary_data):# 检查是否是 Unicode 字符串# (因为二进制数据除了是从文件中直接读取的, 也有可能是从数据库中获取, 比如 mongo)if isinstance(binary_data, str):# 将 Unicode 字符串编码为字节对象binary_data = binary_data.encode('utf-8')md5_hash = hashlib.md5(binary_data)return md5_hash.hexdigest()file_path = "D:/input_image.png"
binary = file_binary(file_path)# 计算 MD5 值
md5 = calculate_md5(binary)print(md5)

3.windows 获取本地文件的 md5

certutil -hashfile test.pdf MD5

4.linux 获取本地文件的 md5

md5sum test.pdf

五.下载网络文件到本地

常用的一种爬虫方法, 任何类型的文件都可以

import urllib.request
import urllib.parseurl = "https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF"urllib.request.urlretrieve(url, "D:/abc.jpg")

六.循环建立多层文件夹

直接建立多层文件夹, 如果已经存在的话, 则忽视


def create_folder_if_not_exists(folder_path):# 检查文件夹是否存在if not os.path.exists(folder_path):# 如果不存在,创建文件夹os.makedirs(folder_path)
http://www.lryc.cn/news/289934.html

相关文章:

  • 架构篇19:单服务器高性能模式-Reactor与Proactor
  • PyInstaller 将 Python 程序生成可直接运行的程序
  • 专有钉钉开发记录,及问题总结
  • Java Swing桌面项目打包成可执行jar
  • python数组反转的几种方式
  • 算法每日一题: 最大合金数 | 二分
  • jvm优化过程
  • 《Docker极简教程》--目录
  • 嵌入式第十二天!(指针数组、指针和二维数组的关系、二级指针)
  • 俄罗斯方块游戏设计文档(基于C语言)
  • 【解决】IntelliJ IDEA 重命名 Shift + F6 失效
  • Unknown encoder ‘libmp3lame
  • Android升级版本兼容问题
  • 微信生成带参数二维码(用户id), 扫码可获取用户id
  • 微信小程序(二十一)css变量-定义页面主题色
  • WSL2 Debian系统添加支持SocketCAN
  • Redis的五种常用数据结构以及其底层实现
  • 防御保护笔记
  • C++笔记之作用域解析符::和命名空间、作用域的关系
  • 回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测(含优化前后预测可视化)
  • linux安装 黑方容灾备份与恢复系统软件v6.0 代理
  • STM32第一节——初识STM32
  • 多场景建模:美团HiNet
  • 第二百九十三回
  • 【网络协议分析】使用Wireshark分析UDP协议
  • TensorFlow Lite中文本分类在Android上的实践
  • 使用vscode查bug
  • LC 2846. 边权重均等查询
  • RabbitMQ简单模式和工作模式
  • c语言实战之贪吃蛇