下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河北省沧州市盐山中学2025届高三下学期一模化学试题(解析版)
- 湖北省十堰市2025-2026学年高一下学期期末考试物理试卷
- 2026浙江杭州市桐庐县凤川街道招聘编外人员2人考试备考试题及答案详解
- 2026年山东文旅景区投资集团有限公司招聘考试备考题库及答案详解
- 2026年山西省长治市事业单位人员招聘考试参考题库及答案详解
- 2026年内蒙古自治区乌兰察布市事业单位人员招聘考试备考试题及答案详解
- 2026年中国安能二局厦门分公司应急技能岗招聘7人考试备考试题及答案详解
- 2026内蒙古苏尼特农文旅投资发展有限公司总经理招聘1人考试模拟试题及答案详解
- 2026年辽宁省阜新市事业单位人员招聘考试备考题库及答案详解
- 2026年葫芦岛市南票区事业单位人员招聘考试参考题库及答案详解
- 2025年番禺区七下期末英语考试卷(含答案)
- 2025法律法规考试试题及答案
- T/CADP 10-2023系留无人机系统灭火装备通用规范
- 苏州苏州工业园区部分单位招聘51人笔试历年参考题库附带答案详解
- DB44∕T 483-2008 四大家鱼养殖技术规范
- 空中旅游安全飞行体验免责声明
- 《中式烹调师》培训教学大纲及教学计划
- 筑炉施工方案
- DB34T 4627-2023 人民防空工程防护质量检测技术规程
- 新人教版数学四年级下册全册课本练习题可编辑可打印
- 心电监护仪的使用课件
评论
0/150
提交评论