python 實現圖像的無損壓縮

原文鏈接:https://blog.csdn.net/weixin_40976261/article/details/88808902

方法1、利用opencv

 

import cv2
img=cv2.imread("G:/1.jpg",1)
cv2.imwrite("G:/11.jpg",img,[cv2.IMWRITE_JPEG_QUALITY,50])


[cv2.IMWRITE_JPEG_QUAITY,50] 指定圖像保存時的品質,降低品質可以實現圖像的壓縮。

其中,50是可以改變的,取值爲[0,100]

0時圖像可以得到極大地壓縮,但是圖像的品質會被大大降低。

jpg是有損壓縮,png是無損壓縮

jpg不能改變透明度

import cv2
img=cv2.imread("G:/1.jpg",1)
cv2.imwrite("G:/11.png",img,[cv2.IMWRITE_PNG_COMPRESSION,0])


[cv2.IMWRITE_PNG_COMPRESSION,0]是調整PNG圖像的壓縮比。

爲0時,壓縮比最小,圖像的品質最好。它的壓縮範圍爲[0,9]

 

方法2、使用PIL進行圖像壓縮

在使用Pillow中的Image.save()方法,使用默認參數保存jpg圖片的過程中發現圖片被壓縮的很嚴重,導致原來很大的大小變成幾十K。這是因爲在保存爲jpg的過程中,內部使用壓縮算法對圖片進行的壓縮處理。

但是有些時候往往需要圖片的大小不能變化太大或不能太小。所以在使用此方式時可以加入參數:

imObj.save(img_name, quality=95)
quality參數: 保存圖像的質量,值的範圍從1(最差)到95(最佳)。 默認值爲75,使用中應儘量避免高於95的值; 100會禁用部分JPEG壓縮算法,並導致大文件圖像質量幾乎沒有任何增益。

使用此參數後,圖片大小會增加。如果圖片的大小還不能滿足你的需求,是否還有其他方式去增加圖片大小呢?

通過查閱資料並嘗試,發現save方法還有一個可以配合quality使用的參數,能夠大大增加圖片大小:

imObj.save(new_name, quality=95, subsampling=0)
subsampling參數:子採樣,通過實現色度信息的分辨率低於亮度信息來對圖像進行編碼的實踐。 (參考:https://en.wikipedia.org/wiki/Chroma_subsampling)
可能的子採樣值是0,1和2,對應於4:4:4,4:2:2和4:1:1(或4:2:0?)。

經過實踐將值設爲0便可以滿足圖片大小增大的需求。

注意: 以上方法的參數只針對於保存爲JPG/JPEG格式的圖片的情況

img2 = Image.open(path)
img2.save(r'E:\project_data\face_fusion\test\test54.jpg', quality=quality, subsampling=0, dpi=(300.0, 300.0))

參考文檔:https://pillow.readthedocs.io/en/5.1.x/handbook/image-file-formats.html#jpeg

參考文檔:https://pillow.readthedocs.io/en/4.0.x/PIL.html

參考文檔:https://blog.csdn.net/weixin_40874586/article/details/81367661

參考文檔:https://blog.csdn.net/weixin_40976261/article/details/88808902

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章