项目上需要保存高清图片,不希望图片压缩太多,故分享一下Python下面的图片高质量保存,内容基于常用的PIL和opencv
一.Python PIL
1、在使用PIL image处理图像要获取高质量的关键地方是下面两点:
代码语言:javascript复制1、处理时要用 ANTIALIAS;
2、保存时是要设置 quality;
2、核心代码:
代码语言:javascript复制im.resize(box, Image.ANTIALIAS)
im.save(path, 'JPEG', quality = 95)
3、示例:
代码语言:javascript复制from PIL import Image
file = '1.jpg'
img = Image.open(file)
w,h = img.size
w,h = round(w * 0.2),round(h * 0.2) // 去掉浮点,防报错
img = img.resize((w,h), Image.ANTIALIAS)
img.save('1.jpg', optimize=True, quality=85) // 质量为85效果最好
二.Python OpenCV
1、使用opencv保存图像
代码语言:javascript复制cv2.imwrite(存储路径,图像变量, [存盘标识])
2、存盘标识说明:
代码语言:javascript复制 1、cv2.CV_IMWRITE_JPEG_QUALITY 设置图片格式为.jpeg或者.jpg的图片质量,其值为0---100(数值越大质量越高),默认95
2、cv2.CV_IMWRITE_WEBP_QUALITY 设置图片的格式为.webp格式的图片质量,值为0--100
3、cv2.CV_IMWRITE_PNG_COMPRESSION 设置.png格式的压缩比,其值为0--9(数值越大,压缩比越大),默认为3
3、存盘标识示例:
代码语言:javascript复制cv2.imwrite('img.jpg',img,[int(cv2.IMWRITE_JPEG_QUALTY),70]) 把img变量保存到img.png,图片品质为70
4、不同类型图片说明:
保存png图像,图像后缀必须为.png,图像质量0-9,默认为3,0质量最好,9最差。
代码语言:javascript复制cv2.imwrite("123.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0])
保存jpg图像,图像后缀必须为.jpg,图像质量0-100,默认为95,100最好,0最差。
代码语言:javascript复制cv2.imwrite("123.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
5、示例:
代码语言:javascript复制import cv2
cv2.namedWindow("Image") #创建窗口
img = cv2.imread('ver.jpg')
cv2.imshow("Image",img)
cv2.imwrite('test.jpg',img,[int(cv2.IMWRITE_JPEG_QUALITY),70])
cv2.waitKey(0)
cv2.destroyWindow("Image")