📜  如何使用Python和 PIL 压缩图像?

📅  最后修改于: 2022-05-13 01:55:48.325000             🧑  作者: Mango

如何使用Python和 PIL 压缩图像?

有些组织接收来自数十万或更多人的数据,这些数据主要是文本形式,带有一些图像。大多数人都知道文本部分以表格的形式存储在数据库中,但是图像呢?与文本数据相比,图像很小,但在存储方面构成了更高的空间。因此,为了节省部分空间并保持流程顺利运行,他们要求用户提交压缩图像。由于大多数读者都有一点 CS 背景(无论是在学校还是在大学),他们明白使用在线免费工具压缩图像对他们来说不是一个好习惯。

在 Windows 7 之前,微软曾经提供 MS Office 图片管理器,可以将图像压缩到一定程度,但它也有一些限制。

懂一点Python的可以安装Python ,在命令提示符下(Linux用户终端)使用pip installpillow安装pillow fork

你会得到这样的屏幕

将所有文件组合到一个文件夹中,并将文件 Compress.py 保存在同一文件夹中。

使用Python运行Python文件。

以下是该文件的源代码:

Python3
# run this in any directory 
# add -v for verbose 
# get Pillow (fork of PIL) from
# pip before running -->
# pip install Pillow
  
# import required libraries
import os
import sys
from PIL import Image
  
# define a function for
# compressing an image
def compressMe(file, verbose = False):
    
      # Get the path of the file
    filepath = os.path.join(os.getcwd(), 
                            file)
      
    # open the image
    picture = Image.open(filepath)
      
    # Save the picture with desired quality
    # To change the quality of image,
    # set the quality variable at
    # your desired level, The more 
    # the value of quality variable 
    # and lesser the compression
    picture.save("Compressed_"+file, 
                 "JPEG", 
                 optimize = True, 
                 quality = 10)
    return
  
# Define a main function
def main():
    
    verbose = False
      
    # checks for verbose flag
    if (len(sys.argv)>1):
        
        if (sys.argv[1].lower()=="-v"):
            verbose = True
                      
    # finds current working dir
    cwd = os.getcwd()
  
    formats = ('.jpg', '.jpeg')
      
    # looping through all the files
    # in a current directory
    for file in os.listdir(cwd):
        
        # If the file format is JPG or JPEG
        if os.path.splitext(file)[1].lower() in formats:
            print('compressing', file)
            compressMe(file, verbose)
  
    print("Done")
  
# Driver code
if __name__ == "__main__":
    main()


压缩前的文件夹:

运行文件前的文件夹

运行文件前的文件夹

执行代码的命令行:

PS:进入目录后请运行代码。

用于执行代码的命令行

用于执行代码的命令行

代码执行后的文件夹:

运行代码后的文件夹

运行代码后的文件夹

您可以清楚地看到压缩文件。