因为工作需要去研究了下png的压缩,发现转换成webp可以小很多,但是webp在手机上的解码速度比png的解码速度慢很多。出于进几年手机设备的处理器的性能也不错了,所以准备两套方案。

在网上搜索了一些资料发现了http://www.linuxfromscratch.org/blfs/view/svn/general/libwebp.html这个和https://pngquant.org/这个。

恩,我不会说了,反正第三方库的网站在这了,参数什么的自己用help看。下面是我的代码:

1.png压缩

 import os
import os.path root_path = os.getcwd()+ os.sep
exe_path = "E:\workSpace\pngTest\pngquant.exe" # full path
def check_file(file):
dic = os.path.splitext(file)
if dic[1] == ".png":
return True
return False def is_file(path):
return os.path.isfile(path) def do_common(path):
common = exe_path + " -f --quality 100 --ext .png --speed 1 " + path
print("*" * 10 + "\n" + path)
os.system(common) def walk_dir():
for root, dir_names, file_names in os.walk(root_path):
for file_name in file_names:
full_path = os.path.join(root, file_name)
if is_file(full_path):
if check_file(full_path):
do_common(full_path)
else:
walk_dir(full_path) if __name__ == "__main__":
walk_dir()

2:png转webp

 import os
import os.path root_path = os.getcwd()+ os.sep
exe_path = '''E:\workSpace\pngTest\webp\libwebp-0.3.1-windows-x64\cwebp.exe''' # full path
def check_file(file):
dic = os.path.splitext(file)
if dic[1] == ".png":
return True
return False def is_file(path):
return os.path.isfile(path) def do_common(path):
dir_name = os.path.dirname(path)
file = os.path.basename(path)
dic = os.path.splitext(file)
file_name = dic[0]
file_out_name = file_name + "_webp"
ext = dic[1]
file_out = os.path.join(dir_name, file_out_name + ".webp") common = exe_path + " -preset drawing -q 100 -alpha_q 100 -quiet " + path + " -o " + file_out
print("*" * 10 + "\n" + path)
os.system(common) os.remove(path)
print("#" * 10 + "\n" + file_out)
os.rename(file_out, path) def walk_dir():
for root, dir_names, file_names in os.walk(root_path):
for file_name in file_names:
full_path = os.path.join(root, file_name)
if is_file(full_path):
if check_file(full_path):
do_common(full_path)
else:
walk_dir(full_path) if __name__ == "__main__":
walk_dir()

如果不符合你的需求,可以自己去改代码!

转载请注明出处

python 调用第三方库压缩png或者转换成webp的更多相关文章

  1. Android JNI如何调用第三方库

    http://www.2cto.com/kf/201504/388764.html Android JNI找不到第三方库的解决方案 cannot load library 最近做一个jni项目,拿到的 ...

  2. [置顶] android利用jni调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so

    0:前言: 在第二篇中,我们主要介绍了丙方android公司利用乙方C++公司给的动态库,直接调用库中的方法,但是这样方式受限于: 乙方C++公司开发的动态库是否符合jni的规范,如果不规范,则不能直 ...

  3. [置顶] android利用jni调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so

    0:前言 1:本文主要作为丙方android公司的身份来写 2:作者有不对的地方,请指出,谢谢 [第一篇:android利用jni调用第三方库——编写库libhello.so] [第二篇:androi ...

  4. Python调用C库

    Python调用C库 Python可以利用ctypes库很方便地调用C的库函数. C库例程: # file: a.c int sum(int a, int b){   int t = 0;   int ...

  5. [置顶] android调用第三方库——第四篇——调用多个第三方库

    0:前言: 在前面三篇中我们介绍了android调用第三方库的形式,在这一篇中我们介绍调用多个第三方库的Android.mk的写法,由于其他三篇介绍的很详细,这里只给出Android.mk的内容. [ ...

  6. python安装第三方库报错visual c++ 14.0 is required

    使用python安装第三方库时报错如下: error: Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visual C++ ...

  7. 在windows系统上使用pip命令安装python的第三方库

    在windows系统上使用pip命令安装python的第三方库 通过cmd启动命令行后,直接输入pip命令,有时候命令行会提示我们pip不是一个指令,这个时候我们可以通过python的集成开发环境里面 ...

  8. 用NDK调用第三方库

    用NDK调用第三方库遇到不少坑,总结一下. 1.添加JNI目录 参考: http://www.cnblogs.com/lanqie/p/7442668.html 2.文件介绍: 其中:JniFacto ...

  9. python的第三方库

    python的第三方库 https://www.lfd.uci.edu/~gohlke/pythonlibs/

随机推荐

  1. github fork项目后,代码更新

    协助约定 每个人都可以fork一份自己的repo,所有的修改都在自己私有的repo上进行:修改完成,测试通过后通过给主repo发pull request请求合并:主repo(Johnqing/n.js ...

  2. mysqldump备份7

    http://www.cnblogs.com/ivictor/p/5505307.html   对于MySQL的备份,可分为以下两种: 1. 冷备 2. 热备 其中,冷备,顾名思义,就是将数据库关掉, ...

  3. 四、IP地址转换

    IP地址与端口 TCP/IP(传输控制协议/网际协议)不是一个协议,而是一组协议的总称,包括IP.TCP.UDP.ICMP.ARP等.它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据 ...

  4. 给iOS 模拟器“安装”app文件

    前言 刚刚接触iOS的时候,我就一直很好奇,模拟器上面能不能直接安装app呢?如果可以,我们就直接在模拟器上面聊QQ和微信了.直到昨天和朋友们聊到了这个话题,没有想到还真的可以给模拟器“安装”app! ...

  5. c++内联函数与静态函数

    不能是虚函数的成员函数有:静态成员函数,内联成员函数,构造函数.没有什么函数需要硬性规定为虚函数,一般析构函数会被定义为虚函数其他就是在继承类中可能需要override的类成员函数应该定义为虚函数 h ...

  6. html5 list属性、autocomplete属性、pattern属性

    list属性的值为某个datalist元素的id,datalist也是html5中新增的属性,类似于选择框select,或者android中的autocomplete textview控件.datal ...

  7. 实现虚拟机上面的linux系统和windows主机的通信

    一:配置静态ip 1:使用startx命名切换到图形化用户界面: 2:在“开始”——“系统设置”——“网络”——eth0 将通过dchp自动获取ip改为静态绑定ip ip地址:填入你要给的ip,需要与 ...

  8. php中的匿名函数(Anonymous functions)和闭包函数(closures)

    一:匿名函数 (在php5.3.0 或以上才能使用) php中的匿名函数(Anonymous functions), 也叫闭包函数(closures), 允许指定一个没有名称的函数.最常用的就是回调函 ...

  9. [转]分布式系统为什么需要 Tracing?

    分布式系统为什么需要 Tracing?   先介绍一个概念:分布式跟踪,或分布式追踪.   电商平台由数以百计的分布式服务构成,每一个请求路由过来后,会经过多个业务系统并留下足迹,并产生对各种Cach ...

  10. h2database源码浅析:锁与MVCC

    Table Level Locking The database allows multiple concurrent connections to the same database. To mak ...