折腾:
【未解决】Python中实现二进制数据的图片的压缩
期间,已经可以压缩了。但是要找到合适的压缩比例和尺寸。
去调试看看,哪种压缩尺寸,压缩出来的性价比高,适合此处移动端显示
用:

最后输出:
1 2 3 4 5 6 7 8 9 10 11 12 | 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)
从原始图片:

压缩到:

所以是压缩了,但是图片质量不够清楚了
->去把压缩尺寸放大一点
1 2 | # 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:
1 2 3 4 5 | 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:
1 2 3 | 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找到合适的性价比高的图片压缩尺寸