python画像の無損圧縮を実現


方法1、opencvを利用する
 
import cv2
img=cv2.imread("G:/1.jpg",1)
cv2.imwrite("G:/11.jpg",img,[cv2.IMWRITE_JPEG_QUALITY,50])

[cv 2.IMWRITE_JPEG_QUAITY,50]画像保存時の品質を指定し、品質を下げて画像の圧縮を実現します.
ただし、50は変更可能であり、値は[001]である.
0の場合、画像は大きく圧縮されるが、画像の品質は大幅に低下する.
jpgは有損圧縮、pngは無損圧縮
jpgは透明度を変えることができません
import cv2
img=cv2.imread("G:/1.jpg",1)
cv2.imwrite("G:/11.png",img,[cv2.IMWRITE_PNG_COMPRESSION,0])

[cv 2.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)可能なサブサンプリング値は、4:4:4,4:2および4:1(または4:2:0?)に対応する0,1および2である.
実際に値を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