折腾:
【未解决】Python中实现二进制数据的图片的压缩
期间,已经可以压缩了。但是要找到合适的压缩比例和尺寸。
去调试看看,哪种压缩尺寸,压缩出来的性价比高,适合此处移动端显示
用:
最后输出:
lengthInMB=0.41 MB len(fileBytes)=427306 imageFile=<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=3543x3543 at 0x1048DAF28> imageFile.size=(3543, 3543) imageFile=<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=250x250 at 0x1048DAF28> imageOutput=<_io.BytesIO object at 0x10373c518> imageSuffix=png imageFormat=PNG imageFile=<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=250x250 at 0x1048DAF28> imageFile.size=(250, 250) compressedImageBytes=b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xfa\。。。 len(compressedImageBytes)=17965
可见:
从410多KB 的(3543, 3543),压缩到17KB的(250, 250)
从原始图片:
压缩到:
所以是压缩了,但是图片质量不够清楚了
->去把压缩尺寸放大一点
# IMAGE_COMPRESS_SIZE = (250, 250) IMAGE_COMPRESS_SIZE = (500, 500)
结果效果中等:
还是不错的。
再去试试800×800
- 3543 × 3543: 427KB,原图,质量高,就是太大了
- 250 × 250:18KB,有点不够清楚
- 500 × 500:45KB,质量中上等,可以接受,还算清晰的
- 800×800:82KB,质量上等,更加清晰,和原图差异很小
那就再去测试测试 jpg图片看看效果
果然不支持JPG:
imageFile.save(imageOutput, imageFormat) File "/Users/crifan/.local/share/virtualenvs/EvaluationSystemServer-6RbmF4Wj/lib/python3.6/site-packages/PIL/Image.py", line 1958, in save save_handler = SAVE[format.upper()] KeyError: 'JPG'
去换成JPEG:
imageFormat = imageSuffix.upper() # PNG if imageFormat == "JPG": imageFormat = "JPEG"
结果就可以了。
去比较了原图
和压缩后的
基本没有区别,除了原图更加精细一些。
- 500×900 110KB 原图,精细些
- 444×800 48KB 画质基本看不出区别了,很好
再去找个原图很大的,上M的图片
觉得500多KB,还是太大了,所以再去压缩了 600×600的
【总结】
总体上,此处600×600的图片,已经足够满足压缩后,画质保持很好,降低的很少,这样放到手机端,足够足够清晰了。
对应压缩比,大概是:
307KB/ (1.3MB * 1024KB/M) = 23%
转载请注明:在路上 » 【已解决】调试Pillow找到合适的性价比高的图片压缩尺寸