|
filenames=glob('{}/*'.format(source_dir))
我们使用了星号(*)作为通配符,意味着我们要查找image目录下所有文件的名称。
输出filenames试试看。
print(filenames)
['image/squirrel.png','image/cat.png']
可见filenames是个列表,里面包含了咱们需要处理的全部图片文件。
下面,我们就来尝试检测每张图片的大小。
forfilenameinfilenames:
withImage.open(filename)asim:
width,height=im.size
print(filename,width,height,os.path.getsize(filename))
我们遍历filenames中的所有图片路径,用PIL对象的size属性获得图片的宽度(width)和高度(height)数值。用os.path.getsize()函数来获取文件大小。
然后,我们把这些内容按文件分别打印出来。
('image/squirrel.png',1024,768,1466487)
('image/cat.png',2067,1163,2851538)
因为我们需要判断某张图片的大小是否超出微信公众平台设置的2M阈值,因此我们需要计算一下,2M阈值换算成比特,到底是个多大的的数字,以便后面的比对。
2*1024*1024
计算结果如下:
2097152
显然,刚才的打印结果里面,cat.png图像超出了这个阈值。
我们心里有数了。
下面就把阈值(threshold)设置为这个数值。
threshold=2*1024*1024
我们来看看自己的直觉和程序判断的实际情况是否一致:
forfilenameinfilenames:
filesize=os.path.getsize(filename)
iffilesize>=threshold:
print(filename)
此处我们要求Python打印全部超出阈值的文件路径。结果如下:
image/cat.png
测试结果正确。程序只需要调整猫咪照片的尺寸。
正式进行压缩和输出之前,我们需要建立输出目录。虽然前面我们设定了,这个子目录叫做output,但是实际的演示目录里,它还尚未创建。
我们先用os.path.exists()函数判定这个目录是否存在。当判定为不存在时,我们采用os.makedirs()函数来创建它。
ifnotos.path.exists(target_dir):
os.makedirs(target_dir)
下面我们计算一下,对需要压缩的图片,新的宽度和高度应该是多少。
forfilenameinfilenames:
filesize=os.path.getsize(filename)
iffilesize>=threshold:
print(filename)
withImage.open(filename)asim:
width,height=im.size
new_width=1024
new_height=int(new_width*height*1.0/width)
print('adjustedsize:',new_width,new_height)
我们把新的宽度设置为了1024,然后按照同等宽高比例算出新的高度取值。
注意这里宽度和高度必须设置为整数类型,否则会报错。
输出结果如下:
image/cat.png
('adjustedsize:',1024,576)
为了把猫咪照片压缩为宽度1024的图片,我们需要设定高度为576,以保证压缩后的图片与原始图片的宽高比一致。
下面我们续写函数,正式调用PIL的resize函数将新的图片设定为新的宽度和高度数值。然后,我们使用PIL的save函数,把生成的图片存储到指定的路径。
forfilenameinfilenames:
filesize=os.path.getsize(filename)
iffilesize>=threshold:
print(filename)
withImage.open(filename)asim:
width,height=im.size
new_width=1024
new_height=int(new_width*height*1.0/width)
resized_im=im.resize((new_width,new_height))
output_filename=filename.replace(source_dir,target_dir)
resized_im.save(output_filename)
输出结果还是需要压缩的图片路径。
image/cat.png
压缩成功了吗?
我们打开样例目录看看。
3/5 首页 上一页 1 2 3 4 5 下一页 尾页 |