1.前因
因需要在系统上传图片,但系统要求图片大小不超过4M,如果手动来压缩,因图片量大会效率低下,得不偿失。
2.搜集资料
资料1:一位南开大学的老师写的知乎文章https://zhuanlan.zhihu.com/p/32246003
资料2:PIL 官网文档https://pillow.readthedocs.io/en/4.0.x/reference/Image.html
资料3:tinify https://tinypng.com/ 单个账号每个月只能使用500次
资料4: Pngquant 压缩png图片,在mac上使用的见文章 https://www.jianshu.com/p/0eb17e12b3c9
资料5:img4web https://github.com/joedicastro/img4web,还未使用过,不知压缩能力
资料6: 自认为学过一点点算法,在网上找来一些算法压缩图片的文章,PCA算法 https://heartbeat.fritz.ai/image-compression-using-different-machine-learning-techniques-5787c88515f8
K-means 算法 https://rickwierenga.com/blog/machine%20learning/image-compressor-in-Python.html
3.自己的探索 使用tinify压缩,一切正常,可以正常的压缩,附代码
import subprocess
import sys
def install(package):
subprocess.call([sys.executable,"-m","pip","install", package])
if __name__ == "__main__":
install('tinify')
import tinify
# 密钥
tinify.key = ''
filename = '图片1.png'
output_filename = '图片2.png'
tinify.from_file(filename).to_file(output_filename)
PIL压缩,遇到一些小问题,但最后发现是自己不懂图片有关的知识导致。 在使用save保存时,若是保存为png,就是的压缩后的图片比原图还是要大,原因是() 待补充(捂脸)。保存为jpg后会是真正的压缩变小。
from PIL import Image
intfile = 'WechatIMG38.jpeg'
outfile = '副本-1.jpg'
out = Image.open(intfile)
out.save(outfile, quality=80)