移动开发时批处理压缩图片提高开发效率

移动开发时批处理压缩图片提高开发效率1. 为什么要压缩图片? 在UI给开发图片的时候,经常都是没有压缩过的原图,但是移动开发时要尽可能减小app体积,而图片在app体积中占比极大,所以将大图压缩为小容量图片并且尽可能不影响图片质量是减小

1. 为什么要压缩图片?

在UI给开发图片的时候,经常都是没有压缩过的原图,但是移动开发时要尽可能减小app体积,而图片在app体积中占比极大,所以将大图压缩为小容量图片并且尽可能不影响图片质量是减小app体积所必须的操作

2. 如何压缩?

压缩方法有很多,网上各种压缩工具,传统压缩方法是UI给了图用这些工具批量压缩,缺点就是要手动选择不同文件夹下的图片,不能做到自定义

3. 压缩为什么格式?

但是现在流行的是压缩为webp格式,WebP 的优势体现在它具有更优的图像数据压缩算法,能带来更小的图片体积,而且拥有肉眼识别无差异的图像质量;同时具备了无损和有损的压缩模式、Alpha 透明以及动画的特性,在 JPEG 和 PNG 上的转化效果都相当优秀、稳定和统一。

4. 用python自动化批处理压缩的脚本

直接放脚本代码 文件名compressImage.py

#!/usr/bin/python
# -*- coding:utf8 -*-

# author:liuhc
# description:压缩指定模块里的大图为webp格式
# create date:2020-09-24 on 1:20 PM
import os


# 查找指定文件夹里大于指定kb的图片列表
def findBigImageFile(folder, size):
    bigFiles = []
    for foldername, subfolders, filenames in os.walk(folder):
        # 对文件进行遍历
        for filename in filenames:
            # .getsize(path)必须是完整路径
            file = os.path.join(foldername, filename)
            # size*1024,使参数size单位为kb
            if os.path.getsize(file) > size * 1024:
                file = os.path.abspath(file)
                suffix = os.path.splitext(file)[1]
                if (suffix == ".png" or suffix == ".jpg") and file.find(".9.png") == -1:
                    bigFiles.append(file)
    return bigFiles


# 将modules中的文件夹都添加到集合里并返回
def saveBigImageFile(modules):
    folders = []
    for module in modules:
        folders.append(module)
    return folders


# modules为当前同级目录下的图片文件夹列表
modules = ["assets/images"]
folders = saveBigImageFile(modules)

# 将大于指定kb的文件都存到bigFiles里
bigFiles = []
for folder in folders:
    # 查找指定文件夹里大于指定kb的图片列表
    bigFiles += findBigImageFile(folder, 50)

# 压缩前的大小
beforeCompressSize = 0
# 压缩后的大小
afterCompressSize = 0
for bigFile in bigFiles:
    absFileName = os.path.splitext(bigFile)[0]
    before = os.path.getsize(bigFile) / 1024
    beforeCompressSize += before
    print("压缩前", before, "kb")
    cmd = "cwebp -q 75 " + bigFile + " -o " + absFileName + ".webp"
    print(cmd)
    os.system(cmd)
    after = os.path.getsize(absFileName + ".webp") / 1024
    afterCompressSize += after
    print("压缩后", after)
for bigFile in bigFiles:
    # 转为webp后删除原文件
    os.remove(bigFile)

if beforeCompressSize > 0:
    print("压缩比", afterCompressSize / beforeCompressSize * 100, "%")

其中代码里的modules = ["assets/images"]为我们要压缩的图片所在的文件夹,路径是相对python脚本文件所在位置的相对路径 然后打开Android Studio的Terminal框,输入python3 compressImage.py即可将我们的图片文件夹里大于指定kb的图片压缩为webp格式并删除被压缩的文件。

注意事项

上文中的webp命令需要自己安装对应文件。Google提供了命令行工具用于将图片转换为webp。在Mac下,可以使用homebrew安装webp工具:

brew install webp

总结

在上面的脚本里我的modules = ["assets/images"]写的是Flutter项目的图片所在路径,如果是Android项目或者IOS项目填写对应项目的图片所在路径即可。将脚本拷贝到自己的项目里,修改modules = ["assets/images"]后,以后UI给了开发图片,只需要放到对应文件夹然后运行一次该脚本即可。

demo已放到github,是Flutter项目: github.com/ikakaxi/com…

今天的文章移动开发时批处理压缩图片提高开发效率分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/18908.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注