最近经常涉及到图像的读取和保存,读取都没什么问题,主要是保存,因为忽略保存质量参数而导致保存图像质量一般,当然最好的操作是不保存,直接在代码中对图像操作。

PIL

​ 在Pillow中的PIL.Image.save()方法中,使用默认参数保存jpg图片的过程中发现图片被压缩的很严重,导致原来很大的图片变成几十KB。但是有些时候往往需要图片的大小不能变化太大或不能太小。这是因为在保存为jpg的过程中,PIL.Image.save()方法内部使用压缩算法对图片进行的压缩处理。

​ 在保存的时候,加上一些参数。

form PIL import Image
img = Image.open("xxx.jpg")
img.save(img_name, quality=95)

​ quality参数: 保存图像的质量,值的范围从1(最差)到95(最佳)。 默认值为75,使用中应尽量避免高于95的值; 100会禁用部分JPEG压缩算法,并导致大文件图像质量几乎没有任何增益。

​ 使用此参数后,图片大小会增加。如果图片的大小还不能满足你的需求,是否还有其他方式去增加图片大小呢?

​ 通过查阅资料并尝试,发现save方法还有一个可以配合quality使用的参数,能够大大增加图片大小:

img.save(new_name, quality=95, subsampling=0) # 可能的子采样值是0,1和2

​ subsampling参数:子采样,通过实现色度信息的分辨率低于亮度信息来对图像进行编码的实践。

​ 注意: 以上方法的参数只针对于保存为JPG/JPEG格式的图片的情况,在项目实践过程中,往往quality参数就满足了要求。

OPENCV

  • cv2.CV_IMWRITE_JPEG_QUALITY 设置图片格式为.jpeg或者.jpg的图片质量,其值为0—100(数值越大质量越高),默认95

  • cv2.CV_IMWRITE_WEBP_QUALITY 设置图片的格式为.webp格式的图片质量,值为0–100

  • cv2.CV_IMWRITE_PNG_COMPRESSION 设置.png格式的压缩比,其值为0–9(数值越大,压缩比越大),默认为3

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") #关闭窗口