Python实现图片缩放与加密保存_第1页
Python实现图片缩放与加密保存_第2页
Python实现图片缩放与加密保存_第3页
Python实现图片缩放与加密保存_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python实现图片缩放与加密保存

使用Python实现图片等比例缩放及AES加密保存的完整代码:

fromPILimportImage

fromCrypto.CipherimportAES

fromCrypto.Randomimportget_random_bytes

importio

importmath

defresizeJmage(image_path,max_size=None):

min

等比例缩放图片到指定最大边长

:paramimage_path:原始图片路径

:parammax_size:最大边长尺寸

:return:缩放后的Image对象

mm

img=Image.open(imagepath)

original_width,original_height=img.size

ifmax_sizeisnotNone:

#计算缩放比例

ratio=min(max_size/original_width,max_size/original_height)

new_width=int(original_width*ratio)

new_height=int(original_height*ratio)

new_size=(new_width,new_height)

img-img.resize(new_size,Image.Resampling.LANCZOS)

returnimg

defencrypt_image(image,key,output_path,image_format='PNG'):

min

加密并保存图片

:paramimage:PILImage对象

:paramkey:加密密钥(16/24/32字节)

:paramoutput_path:加密文件输出路径

:paramimage_format:图片保存格式

nun

it将图片保存到内存字节流

img_bytes=io.ByteslOf)

image.save(img_bytes,format=image_format)

img_data=img_bytes.getvalue()

#初始化加密器(CBC模式需要16字节的IV)

cipher=AES.new(key,AES.MODE_CBC)

#PKCS7填充

block_size=AES.block_size

pad_len=block_size-(len(img_data)%block_size)

img_data_padded=img_data+bytes([pad_len]*padjen)

#加密数据

ciphertext=cipher.encrypt(img_data_padded)

it写入文件(IV+密文)

withopen(output_path,'wb')asf:

f.write(cipher.iv)

f.write(ciphertext)

defdecrypt_image(encrypted_path,key,output_path):

HUH

解密图片并保存

;paramencrypted_path:加密文件路径

:paramkey:解密密钥

:paramoutput_path:解密图片保存路径

HUH

withopen(encrypted_path,'rb')asf:

iv=f.read(16)#读取前16字节作为IV

ciphertext=f.read()#剩余部分为加密数据

#初始化解密器

cipher=AES.new(key,AES.MODE_CBC,iv=iv)

#解密并去除填充

decrypted_padded=cipher.decrypt(ciphertext)

padjen=decrypted_padded[-l]

decrypted_data=decrypted_padded[:-pad_len]

#从字节数据加载图片并保存

img=Image.open(io.ByteslO(decrypted_data))

img.save(output_path)

print(f"解密成功,图片已保存至:{output_path}")

#使用示例

if_name_=="_main_":

#生成随机密钥(建议妥善保存)

encryption_key=get_random_bytes(32)#AES-256

#1.缩放图片

resizedjmg=resizeJmagef'input.jpg",max_size=800)

#2.加密保存

encrypt_image(resized_img,encryption_key,"encrypted.bin")

it3.解密示例(可选)

itdecrypt_image("encrypted.bin",encryption_key,"decrypted.jpg")

#保存密钥(重要!)

withopenCencryption_key.bin","wb")askey_file:

key_file.write(encryption_key)

print("加密完成,请妥善保管密钥文件:encryption_key.bin")

使用说明

安装依赖库:

pipinstallpillowpycryptodome

主要功能:

resize_image():支持按最大边长等比例缩放图片

encrypt_image():使用AES-CBC模式加密图片并保存为二进制文件

decrypt_image():解密被加密的图片文件

参数说明:

max_size:缩放后的图片最大力长(保持原始宽高比)

key:加密密钥(16/24/32字节对应AES-128/192/256)

image_format:支持所有Pillow格式(PNG、JPEG等)

注意事项:

加密后的文件包含16字节IV+加密数据

必须妥善保存密钥和IV才能成功解密

建议使用PNG格式保持图片质量(JPEG为有损压缩)

扩展建议

密钥管理:

可以使用密钥派生函数(PBKDF2)从密码生成密钥

结合非对称加密(RSA)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论