python如何對(duì)圖片或文件的操作
一. base64 與圖片的相互轉(zhuǎn)換
1. base64 轉(zhuǎn)圖片
import base64
from io import BytesIO
from PIL import Image
# base64 編碼的圖像數(shù)據(jù)(示例)
base64_data = "iVBn9DHASKJDjDsdSADSf8lgg=="
# 將 base64 編碼的字符串解碼為二進(jìn)制數(shù)據(jù)
binary_data = base64.b64decode(base64_data)
# 將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為 BytesIO 對(duì)象
bytes_io = BytesIO(binary_data)
# 使用 PIL(Pillow)加載圖像
image = Image.open(bytes_io)
# 保存圖像
image.save("output_image.png")
print("圖像保存成功")
2.圖片轉(zhuǎn) base64
import base64
def file_to_base64(file_path):
with open(file_path, "rb") as file:
# 讀取文件內(nèi)容
file_data = file.read()
# 使用base64編碼
base64_encoded = base64.b64encode(file_data)
# 將bytes對(duì)象轉(zhuǎn)換為字符串
base64_string = base64_encoded.decode("utf-8")
return base64_string
# 示例:將圖片轉(zhuǎn)換為Base64編碼
image_path = "D:/output_image.png"
base64_data = file_to_base64(image_path)
# 打印Base64編碼
print(base64_data)
二.圖片和像素點(diǎn)的操作
1. 讀取圖片的像素點(diǎn)矩陣, 寫(xiě)入到 json 文件中
jpg 一般為3通道, png 一般為 4通道
"""
讀取圖片像素點(diǎn)矩陣, 寫(xiě)入到j(luò)son文件
"""
from PIL import Image
import numpy as np
import json
# 打開(kāi)圖片
img = Image.open('D:/input_image.png')
# 獲取圖片大小和格式
print(img.size, img.format)
# 顯示圖片
# img.show()
# 獲取像素?cái)?shù)據(jù)
pixels = np.array(img)
# 將像素點(diǎn)轉(zhuǎn)為 list 寫(xiě)入文件
file_object = open('D:/why.json', 'w', encoding="utf8")
json.dump(pixels.tolist(), file_object, ensure_ascii=False)2.讀取像素矩陣, 生成圖片
"""
讀取像素點(diǎn)矩陣, 生成圖片
"""
import json
import numpy as np
import cv2
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)三.本地文件和二進(jìn)制的互相轉(zhuǎn)換
1.本地文件轉(zhuǎn)二進(jìn)制
# 本地文件轉(zhuǎn)二進(jìn)制
def file_binary(path):
with open(path, 'rb') as file:
binary_data = file.read()
return binary_data
file_path = "D:/input_image.png"
binary = file_binary(file_path)2.二進(jìn)制轉(zhuǎn)本地文件
# 本地文件轉(zhuǎn)二進(jìn)制
def file_binary(path):
with open(path, 'rb') as file:
binary_data = file.read()
return binary_data
# 二進(jìn)制寫(xiě)入到本地文件
def save_binary_file(path, binary_data):
# 將二進(jìn)制數(shù)據(jù)寫(xiě)入文件
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)四.計(jì)算文件的 md5
1.計(jì)算本地文件的 md5
import hashlib
# 計(jì)算本地文件的 md5 值
def calculate_md5(path):
# 打開(kāi)圖像文件
with open(path, "rb") as f:
# 讀取圖像數(shù)據(jù)
binary_data = f.read()
# 計(jì)算 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.計(jì)算數(shù)據(jù)二進(jìn)制的 md5
跟計(jì)算本地文件的md5差不多, 只不過(guò)傳入的是二進(jìn)制數(shù)據(jù)而已, 二進(jìn)制數(shù)據(jù)除了是從文件中直接讀取的, 也有可能是從數(shù)據(jù)庫(kù)中獲取, 比如 mongo, 所以也要注意一下編碼問(wèn)題。
import hashlib
# 本地文件轉(zhuǎn)二進(jìn)制
def file_binary(path):
with open(path, 'rb') as file:
binary_data = file.read()
return binary_data
# 計(jì)算二進(jìn)制數(shù)據(jù)的 md5
def calculate_md5(binary_data):
# 檢查是否是 Unicode 字符串
# (因?yàn)槎M(jìn)制數(shù)據(jù)除了是從文件中直接讀取的, 也有可能是從數(shù)據(jù)庫(kù)中獲取, 比如 mongo)
if isinstance(binary_data, str):
# 將 Unicode 字符串編碼為字節(jié)對(duì)象
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)
# 計(jì)算 MD5 值
md5 = calculate_md5(binary)
print(md5)
3.windows 獲取本地文件的 md5
certutil -hashfile test.pdf MD5
4.linux 獲取本地文件的 md5
md5sum test.pdf
五.下載網(wǎng)絡(luò)文件到本地
常用的一種爬蟲(chóng)方法,任何類(lèi)型的文件都可以
import urllib.request import urllib.parse url = "https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF" urllib.request.urlretrieve(url, "D:/abc.jpg")
六.循環(huán)建立多層文件夾
直接建立多層文件夾, 如果已經(jīng)存在的話(huà), 則忽視
def create_folder_if_not_exists(folder_path):
# 檢查文件夾是否存在
if not os.path.exists(folder_path):
# 如果不存在,創(chuàng)建文件夾
os.makedirs(folder_path)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python動(dòng)態(tài)視頻下載器的實(shí)現(xiàn)方法
這里向大家分享一下python爬蟲(chóng)的一些應(yīng)用,主要是用爬蟲(chóng)配合簡(jiǎn)單的GUI界面實(shí)現(xiàn)視頻,音樂(lè)和小說(shuō)的下載器。今天就先介紹如何實(shí)現(xiàn)一個(gè)動(dòng)態(tài)視頻下載器,需要的朋友可以參考下2019-09-09
Python深度學(xué)習(xí)pytorch神經(jīng)網(wǎng)絡(luò)Dropout應(yīng)用詳解解
這篇文章主要為大家介紹了Python深度學(xué)習(xí)中關(guān)于pytorch神經(jīng)網(wǎng)絡(luò)Dropout的應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10
python的scikit-learn將特征轉(zhuǎn)成one-hot特征的方法
今天小編就為大家分享一篇python的scikit-learn將特征轉(zhuǎn)成one-hot特征的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
Python 獲取當(dāng)前目錄的多種方法(各種方法詳解)
本文詳細(xì)介紹了在Python中獲取當(dāng)前目錄的多種方法,包括獲取當(dāng)前工作目錄和當(dāng)前腳本文件所在目錄,各種方法結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2026-01-01
Python類(lèi)的基礎(chǔ)入門(mén)知識(shí)
關(guān)于類(lèi)的定義2008-11-11
Python實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)采集新型冠狀病毒數(shù)據(jù)實(shí)例
在本篇文章里小編給大家整理了關(guān)于Python實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)采集新型冠狀病毒數(shù)據(jù)實(shí)例內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。2020-02-02
Python高效生成requirements.txt的兩種方法
Python項(xiàng)目依賴(lài)管理是開(kāi)發(fā)流程中的關(guān)鍵環(huán)節(jié),requirements.txt文件作為記錄項(xiàng)目依賴(lài)的標(biāo)準(zhǔn)方式,能確保環(huán)境一致性并簡(jiǎn)化協(xié)作部署流程,掌握其生成方法對(duì)開(kāi)發(fā)者至關(guān)重要,本文給大家介紹了兩種高效生成requirements.txt的方法,需要的朋友可以參考下2025-12-12
基于Python實(shí)現(xiàn)的車(chē)牌識(shí)別系統(tǒng)
本文將以基于Python的車(chē)牌識(shí)別系統(tǒng)實(shí)現(xiàn)為方向,介紹車(chē)牌識(shí)別技術(shù)的基本原理、常用算法和方法,并詳細(xì)講解如何利用Python語(yǔ)言實(shí)現(xiàn)一個(gè)完整的車(chē)牌識(shí)別系統(tǒng),需要的朋友可以參考下2023-10-10
從基礎(chǔ)語(yǔ)法到實(shí)戰(zhàn)進(jìn)階詳解Python的分支結(jié)構(gòu)完全指南
在編程的世界里,代碼的執(zhí)行路徑往往不是一條直線(xiàn),我們需要根據(jù)不同的條件,讓程序做出不同的決策,這就是分支結(jié)構(gòu)(Control Flow)的魅力所在,本文就來(lái)系統(tǒng)介紹一下Python分支結(jié)構(gòu)的核心語(yǔ)法與進(jìn)階應(yīng)用吧2026-05-05

