使用Python写一个程序,使用PIL库对图片进行等比例压缩,无论压缩前文件大小如何,压缩后文件小于10KB
时间: 2024-03-02 13:53:27 浏览: 184
好的,我理解了你的问题。下面是使用PIL库对图片进行等比例压缩并确保压缩后文件小于10KB的Python程序:
```python
from PIL import Image
import os
def compress_image(file_path):
img = Image.open(file_path)
w, h = img.size
if w <= 400 and h <= 400:
return # 不需要压缩
if w > h:
new_w = 400
new_h = int(h * new_w / w)
else:
new_h = 400
new_w = int(w * new_h / h)
img = img.resize((new_w, new_h), Image.ANTIALIAS)
new_file_path = os.path.splitext(file_path)[0] + '_compressed.jpg'
img.save(new_file_path, optimize=True, quality=85)
while os.path.getsize(new_file_path) > 10240: # 压缩后文件大小大于10KB
img = img.resize((new_w - 10, new_h - 10), Image.ANTIALIAS)
img.save(new_file_path, optimize=True, quality=85)
return new_file_path
if __name__ == '__main__':
file_path = 'test.jpg'
new_file_path = compress_image(file_path)
print(new_file_path)
```
这个程序会读取指定路径下的图片文件,使用PIL库对其进行等比例压缩。如果图片宽高均小于等于400像素,则不进行压缩。如果图片宽高比例不同,则会按比例缩放到宽度为400或高度为400,然后保存为JPEG格式,并使图片文件大小尽量小于10KB。如果压缩后文件大小仍然大于10KB,则会继续缩小图片尺寸,直到文件大小小于10KB。
你可以将`file_path`变量替换为你想要压缩的图片路径。程序会返回压缩后的图片路径,如果不需要压缩则返回None。
阅读全文