指定したフォルダ内について、「.jpg」で終わる全てのファイルを圧縮する。
(読み込み、圧縮エラー時の処理など書いておらず粗いです)
import cv2
import glob
import os
Quality = 10
def img_encode(img):
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), Quality]
result, encimg = cv2.imencode(".jpg", img, encode_param) # (bool値,エンコードしたImageオブジェクト)のタプルが返ってくる
return cv2.imdecode(encimg, cv2.IMREAD_UNCHANGED)
def output_imgs():
path_list = glob.glob(r"<パス>\*.jpg")
for i, path in enumerate(path_list):
img = cv2.imread(path)
compressed_img = img_encode(img)
cv2.imwrite(r"<パス>" + "python-compressed" + "-rate" + str(Quality) + "-" + str(i+1) + ".jpg", compressed_img)
output_imgs()
ハマった点
- パスに日本語が含まれていると、
cv2.imread
で正しく動作しない(None
が返ってくる)