如何使用Python和PIL来压缩图像
有些组织会收到几十人或更多人的数据,这些数据大多是文本形式的,还有一些图像。你们中的大多数人都知道,文本部分是以表格的形式存储在数据库中的,但是图像呢?与文本数据相比,图像很小,但在存储方面却构成了更大的空间。因此,为了节省空间并保持程序的顺利运行,他们要求用户提交压缩的图像。由于大多数读者都有一点CS背景(无论是在学校还是在大学),他们明白使用在线免费工具来压缩图像对他们来说不是一个好的做法。
在Windows 7之前,微软曾经提供MS Office Picture Manager,它可以用来在一定程度上压缩图像,但它也有一些限制。
懂一点python的人可以安装python,并在命令提示符下使用pip install pillow(Linux用户使用终端)来安装 pillow fork。
你会得到一个类似这样的屏幕
将所有文件集合在一个文件夹中,并将文件Compress.py放在同一文件夹中。
用python运行Python文件。
以下是该文件的源代码。
# 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:请在进入目录后运行代码。
执行代码的命令行
执行代码后的文件夹。
运行代码后的文件夹
你可以清楚地看到压缩的文件。