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

python如何对图片或文件的操作

一. base64 与图片的相互转换

1. base64 转图片

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

importbase64

fromioimportBytesIO

fromPILimportImage

# 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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

importbase64

deffile_to_base64(file_path):

withopen(file_path,"rb") asfile:

# 读取文件内容

file_data=file.read()

# 使用base64编码

base64_encoded=base64.b64encode(file_data)

# 将bytes对象转换为字符串

base64_string=base64_encoded.decode("utf-8")

returnbase64_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通道

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

"""

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

"""

fromPILimportImage

importnumpy as np

importjson

# 打开图片

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.读取像素矩阵, 生成图片

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

"""

读取像素点矩阵, 生成图片

"""

importjson

importnumpy as np

importcv2

file_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.本地文件转二进制

1

2

3

4

5

6

7

8

9

# 本地文件转二进制

deffile_binary(path):

withopen(path,'rb') asfile:

binary_data=file.read()

returnbinary_data

file_path="D:/input_image.png"

binary=file_binary(file_path)

2.二进制转本地文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

# 本地文件转二进制

deffile_binary(path):

withopen(path,'rb') asfile:

binary_data=file.read()

returnbinary_data

# 二进制写入到本地文件

defsave_binary_file(path, binary_data):

# 将二进制数据写入文件

withopen(path,"wb") asfile:

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

importhashlib

# 计算本地文件的 md5 值

defcalculate_md5(path):

# 打开图像文件

withopen(path,"rb") as f:

# 读取图像数据

binary_data=f.read()

# 计算 MD5 值

md5_hash=hashlib.md5(binary_data)

md5_value=md5_hash.hexdigest()

returnmd5_value

# 图像文件路径

file_path="D:/output_image.png"

# 获取图像的 MD5 值

md5=calculate_md5(file_path)

print(md5)

2.计算数据二进制的 md5

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

importhashlib

# 本地文件转二进制

deffile_binary(path):

withopen(path,'rb') asfile:

binary_data=file.read()

returnbinary_data

# 计算二进制数据的 md5

defcalculate_md5(binary_data):

# 检查是否是 Unicode 字符串

# (因为二进制数据除了是从文件中直接读取的, 也有可能是从数据库中获取, 比如 mongo)

ifisinstance(binary_data,str):

# 将 Unicode 字符串编码为字节对象

binary_data=binary_data.encode('utf-8')

md5_hash=hashlib.md5(binary_data)

returnmd5_hash.hexdigest()

file_path="D:/input_image.png"

binary=file_binary(file_path)

# 计算 MD5 值

md5=calculate_md5(binary)

print(md5)

3.windows 获取本地文件的 md5

1

certutil-hashfile test.pdf MD5

4.linux 获取本地文件的 md5

1

md5sum test.pdf

五.下载网络文件到本地

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

1

2

3

4

5

6

7

importurllib.request

importurllib.parse

url="https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF"

urllib.request.urlretrieve(url,"D:/abc.jpg")

六.循环建立多层文件夹

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

1

2

3

4

5

defcreate_folder_if_not_exists(folder_path):

# 检查文件夹是否存在

ifnotos.path.exists(folder_path):

# 如果不存在,创建文件夹

os.makedirs(folder_path)

总结

以上为个人经验,希望能给大家一个参考

http://www.jsqmd.com/news/664431/

相关文章:

  • 从RoboMaster A板到你的项目:手把手教你玩转MPU6500六轴传感器(附完整接线图)
  • HunyuanVideo-Foley多场景落地:影视后期、播客制作、AIGC内容增效
  • 保姆级教程:基于清音听真Qwen3-ASR-1.7B搭建个人语音笔记系统
  • python打包成 .so的实现步骤
  • AGI辅助诊疗合规落地指南(中国首份NMPA+卫健委双认证实施白皮书)
  • IDEA堆内存优化指南:避免OOM的5个关键配置技巧(含-Xms和-Xmx参数详解)
  • 一键智能分段:BERT文本分割镜像快速入门与效果实测
  • Qwen3-14B高性能推理部署教程:vLLM加速+显存调度策略深度解析
  • 简单三步部署Qwen3-TTS,轻松实现文字转语音,支持多国语言
  • Java高级开发必须掌握JMH进行性能测试优化
  • 灵毓秀-牧神-造相Z-Turbo问题解决:常见生成错误与快速修复方法
  • 卡证检测矫正模型对抗攻击与安全加固研究
  • Qwen3.5-9B-AWQ-4bit部署教程:基于CSDN GPU平台的7860端口快速访问指南
  • 想了解钕铁硼磁铁厂家?2026年3月口碑推荐别错过,电机磁铁/粘结钕铁硼/永磁铁氧体,钕铁硼磁铁厂家推荐分析 - 品牌推荐师
  • ISOWorkshop光盘镜像处理工具:制作光盘镜像与ISO解压提取的完整指南
  • 2026年3月国内知名的选果机企业哪家好,AI无损测糖分选机/无损选果机/AI智能无损选果机/冬枣选果机,选果机产品推荐 - 品牌推荐师
  • GPU显存稳定性终极检测:memtest_vulkan如何彻底解决硬件诊断难题
  • Qwen3-TTS多语种语音合成效果展示:俄文/葡文/意文真实音频对比
  • DeOldify图像上色数据隐私:所有处理在本地完成,无云端传输保障合规
  • DAMOYOLO-S模型轻量化新星YOLOv11对比评测:速度与精度的权衡
  • SDXL 1.0创意工作流:结合Vue.js构建可视化控制面板
  • 如何用嘎嘎降AI处理经济学论文:数据表格和经济模型保留操作指南
  • 2026年3月商标购买企业推荐,买服装商标/商标转让购买/专业商标买卖/商标安全交易/商标交易转让,商标购买机构怎么选择 - 品牌推荐师
  • MySQL搭建主从后如何校验数据一致性_使用pt-table-sync修复差异
  • 美胸-年美-造相Z-Turbo效果实测:LoRA微调后对‘自然感’‘呼吸感’‘动态感’的增强表现
  • Visio图表智能生成:基于Phi-4-mini-reasoning描述自动创建流程图与架构图
  • 京东自动化抢购脚本终极指南:JDspyder让热门商品抢购变得简单
  • RMBG-1.4开源模型部署:AI净界支持JPG/PNG批量处理实操指南
  • RTX 4090D专用PyTorch 2.8镜像:torch.compile+FlashAttention-2性能对比
  • 如何用嘎嘎降AI批量处理多章节论文:章节分段上传操作教程