Python 所有图片格式数据相互转换,等比例压缩图片

本文介绍了如何在Python中将np.ndarray与PIL.Image对象相互转换,特别是利用numpy.array和Image.fromarray实现。同时,针对将numpy数组转换为等价于open(file, ""rb"")的bytes数据,强调了需要进行正确的图片格式编码。此外,文章还讨论了等比例压缩图片的方法。" 125918970,11797452,ruoyi项目在CentOS 7的部署教程,"['vue.js', '前端开发', 'java', 'spring', '数据库管理']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

np.ndarray与PIL.Image对象相互转换

Image对象有crop功能,也就是图像切割功能,但是使用opencv读取图像的时候,图像转换为了np.adarray类型,该类型无法使用crop功能,需要进行类型转换,所以使用下面的转换方式进行转换:

numpy.array(img)                       img对象转化为np数组

Image.fromarray(arr)                 np数组转化为img对象

将numpy array转换为bytes

问题分析

需要将图片的numpy的array数据转换为bytes,转换之后的bytes数据要等价于open(file,"rb")。在使用numpy的tobytes(等价于tostring)方法发现得到的bytes数据并不等价于open(file,"rb")数据,需要对array数据进行相同的图片格式编码之后,再使用tobytes才行。

import cv2
 
img_path = "img/test.jpg"
#打开图片文件获取二进制数据
with open(img_path,"rb") as f:
    #读取图片的二进制数据
    bin_contents = f.read()
 
#使用opencv读取图片
img = cv2.imread(img_path)
#将numpy的数组转换为bytes(可以跳过这步)
array_bytes = img.tobytes()#或者使用img.tostring()
 
 
#对数组
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

读书小孩

您的打赏将是我前行的动力源

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值