|
@@ -0,0 +1,46 @@
|
|
|
|
+import argparse
|
|
|
|
+import os
|
|
|
|
+
|
|
|
|
+from PIL import Image
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def convert_to_webp(dir_path):
|
|
|
|
+ common_image_extensions = [".jpg", ".jpeg", ".png", ".webp"]
|
|
|
|
+ for subdir, dirs, files in os.walk(dir_path):
|
|
|
|
+
|
|
|
|
+ for file in files:
|
|
|
|
+ # 如果文件不是图片,就跳过
|
|
|
|
+ if not any(file.lower().endswith(ext) for ext in common_image_extensions):
|
|
|
|
+ continue
|
|
|
|
+ filepath = subdir + os.sep + file
|
|
|
|
+ # 如果文件实际类型和文件扩展名不一致,就把文件修改为扩展名的类型,然后重新保存
|
|
|
|
+ file_extension = os.path.splitext(filepath)[1][1:]
|
|
|
|
+ file_true_type = Image.open(filepath).format
|
|
|
|
+ # 打印文件名和文件实际类型
|
|
|
|
+ print(filepath, file_true_type, file_extension)
|
|
|
|
+
|
|
|
|
+ # 全部转小写
|
|
|
|
+ file_extension = file_extension.lower()
|
|
|
|
+ # 如果是jpg,就转换为jpeg
|
|
|
|
+ if file_extension == "jpg":
|
|
|
|
+ file_extension = "jpeg"
|
|
|
|
+ file_true_type = file_true_type.lower()
|
|
|
|
+ if file_extension != file_true_type:
|
|
|
|
+ # 读取图片,转换为file_extension类型
|
|
|
|
+ # 打印日志
|
|
|
|
+ print(f"检测到文件扩展名和文件实际类型不一致,文件扩展名为{file_extension},文件实际类型为{file_true_type}")
|
|
|
|
+ img = Image.open(filepath)
|
|
|
|
+ img.save(filepath, file_extension)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+# if __name__ == "__main__":
|
|
|
|
+ # parser = argparse.ArgumentParser(description='Convert images to webp format.')
|
|
|
|
+ # parser.add_argument('dir_path', type=str, help='Directory path to scan for images')
|
|
|
|
+ #
|
|
|
|
+ # args = parser.parse_args()
|
|
|
|
+ #
|
|
|
|
+ # convert_to_webp(args.dir_path)
|
|
|
|
+
|
|
|
|
+## python compress_dir_img.py /path/to/directory
|
|
|
|
+convert_to_webp("/Users/alvin/Desktop/tmp")
|