web 项目的图片处理python

本人用 django制作了一个个人图片画廊.所以照片需要压缩.千方百计的寻找图片无损压缩(小损也行)方式.以下为历程

找了各种压缩命令行,均无明显见效,还发生了图片越来越大的事情,(可能是我实在不懂命令...),可能我遇到了这个问题:

    https://yq.aliyun.com/articles/74634

   不懂, 所以有下方的解决方式

  要从 tinpng 说起. tinpng无疑是极致压缩的标杆.所以一切压缩后的大小都以 tinpng 为目标

但是之前尝试了很多很多方式,各种控制台命令,都无法达到目标大小.尝试了好几天之后总结如下:

1.先用 PIL 压缩.

    pillow 压缩无疑是最方便快捷的图片处理工具,我这里是清理了图片的 exif 信息.把图片从原来的4.2m 降低到1.5m(tinpng 上能压缩到938k,比较接近了,这张图片犹豫清晰度较高,所以无法有太夸张的压缩比)

    不废话,上代码

            img = Image.open(source_path)
            # exif_dict = piexif.load(crop_img.info["exif"])
            exif_bytes = piexif.dump({})
            img.save(source_path+'.jpg', 'JPEG', exif=exif_bytes) 

    

    不过讨厌的是清除了 exif 信息,导致照片旋转了!唉.头大

2.保持旋转方向

    如何保持旋转方向?照片里面存储的信息,这种信息包括地理位置,涉及隐私,必须要删除.

    如图,exif 信息里面有orientation 信息.该信息是记录图片旋转方向的

    

旋转角度 参数
1
顺时针90° 6
逆时针90° 8
180° 3
  读取上图,得到orientation值为6,顺时针调整图片后,朝向正确.那么接下来就很明确了,在图片保存的时候顺便做一下图片旋转操作,所以改代码咯, 清空了 exif 信息.
img = Image.open(source_path)
old_exif = piexif.load(img.info["exif"])
if '0th' in old_exif and piexif.ImageIFD.Orientation in old_exif['0th']:
  orientation = old_exif['0th'][piexif.ImageIFD.Orientation]
if orientation == 6:
    img = img.rotate(-90, expand=True)
if orientation == 3:
    img = img.rotate(180)
if orientation == 8:
    img = img.rotate(90, expand=True)
exif_bytes = piexif.dump({})img.save(source_path + '.jpg', 'JPEG', exif=exif_bytes)

   这里对了三个角度做旋转,显示方向没问题

  在此之后,我缩放了它尺寸.等比压缩到2000X2000以下,博客第一张图片从4.2m 压缩到了523k,这并不让人满意,因为该尺寸的图片,在 tinpng 中能压缩到417.7k!(PILLOW 内心 os:臣妾实在做不到啊....TAT)

3.使用 google 的webp 进一步压缩

    谷歌的 webp 无疑给了我一丝希望(webp os:(‧_‧?)有事说事,脏手拿开,别污染了我腿毛)

官网:自行翻墙:https://developers.google.com/speed/webp/docs/using

    使用:命令行:

./cwebp   or_6.jpg -o image.webp

    执行完毕.发现 webp 文件大小为364k! 

可是还是大啊,不过 webp 的 api 还是很全面的,加上-size 204800 限制在200k 左右

./cwebp  -size 204800 or_6.jpg -o image.webp

完美的一匹...(webp os:喏.)

其实之后还要做很多事情,比如 safari 好像不显示 webp 图片等等.不过这些都不重要.网上有解决方法.(虽然暂时不会,但是很有信心的样子!以后附上)

最后附上 webp 的参数表

参数

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值