开发一款图片压缩工具(三):使用 click 实现命令行
2020-04-27 22:07
886 查看
上一篇实现了图片的压缩函数。现在如果需要对图片进行压缩,可以调用实现的函数进行压缩:
pngquant_compress('elephant.png', force=True, quality=20)[/code]
但是每次输入 python run_script.py 没有对应的参数传入, 还要去改脚本参数挺麻烦的。可以添加命令行的方式进行调用:
python run_script.py elephant.png --force --quality 30[/code]
1. 使用 click
python 的 click 库可以非常方便的实现命令行调用。 click 是 flask 作者开发的。用法很简单,只需要添加装饰器在需要运行的程序上就可以了:
当我输入 python demo.py —help 的时候, 会显示命令行帮助信息:
2. click 必填参数 argument
可以在函数上添加
@click.argument('arg_name'):
import click @click.argument("arg_name") def pngquant_compress():[/code]
当程序没有填入必填参数时,将会提示:
3. click 可选参数 option
option 是 click 的重点,比 argument 要灵活很多。他的表示方法和 argument 差不多:
import click @click.option("--force") def pngquant_compress(): pass[/code]
如果想用多个名称同时表示一个参数,只需要继续在 option 方法中添加位置参数, 就可以通过
-f,
--violent的形式
传入可选参数:
import click @click.option("--force", "-f", "--violent") def pngquant_compress(): pass[/code]
如果不想以
--force value的形式传入值,也可以直接通过 flag 形式,不传入任何值:
import click @click.option("--force", "-f", "--violent", is_flag=True) def pngquant_compress(): pass[/code]
显示提示信息:
import click @click.option( "--force", "-f", "--violent", is_flag=True, help="强制执行" ) def pngquant_compress(): pass[/code]
4. 参数类型限制
比如 quality 参数传入的可以是数字 20, 也可以是 20-30 这种形式。这时候需要自定义一种数据类型进行校验。
class QualityInteger(click.ParamType): name = "QualityInteger" def convert(self, value, param, ctx): if value.isdigit(): return int(value) try: min_v, max_v = value.split('-') int(min_v), int(max_v) return value except ValueError: self.fail('参数不符合类似 20-30 或者 30 的规范')[/code]
此时如果输入的参数没有通过检验,命令行会提示错误:
\picom>python demo_06_封装成命令行.py elephant.png -q 20-4a Usage: demo_06_封装成命令行.py [OPTIONS] FP Error: Invalid value for "--quality" / "-q": 参数不符合类似 20-30 或者 30 的规范[/code]
5. setuptools 打包
from setuptools import setup, find_packages setup( name='picom', version='0.1', install_requires=[ 'Click', 'requests' ], )[/code]
setup.cfg 配置文件:
[metadata] name = picom description = A app to compress images. [options] packages = find: package_dir = = src include_package_data = true python_requires = >= 3.6 [options.packages.find] where = src [options.entry_points] console_scripts = picom = picom.cli:cli[/code]
把 picom 模块放入依赖包路径,执行
pip install --editable .可以安装这个模块。
安装完成以后,可以在 python 解释器路径看到 picom.exe 命令行文件。建议创建虚拟环境安装,以免对系统环境造成污染。
6. 撤销 pngquant 全局变量,改由 picom 包内调用
之前在 pngquant_compress 函数中使用 pngquant 命令行是采用环境变量,现在既然是通过 picom 命令去执行,就可以把 pngquant
的环境变量去掉。
首先需要在 picom 包中添加一个 ext 的包存放 pngquant 的执行文件。
修改原来的调用函数:
# pngquant.py # 原来的写法 command = f'pngquant {fp} --skip-if-larger {force_command} {quality_command}' # 新写法,直接调用 ext/ 下的可执行文件,而不是环境变量中的 pngquant pngquant_cmd = Path(__file__).resolve().parent / 'ext' / 'pngquant' command = f'{pngquant_cmd} {fp} --skip-if-larger {force_command} {quality_command}'[/code]
7. 总结
通过 click 库和 setuptool 打包,picom 压缩工具使用变得比较简单:
picom elephant.png[/code]
相关文章推荐
- 使用google开源工具实现图片压缩
- Ink——一款使用React风格开发命令行界面应用(CLI App)的nodejs工具
- 微信公众号开发《四》使用微信JS-SDK实现手机图片上传,支持压缩、预览。并下载图片到自身服务器
- 一款压缩图片的工具
- 用C#开发一个WinForm版的批量图片压缩工具
- iOS开发-使用NSURLSession实现文件断点下载,文件离线续传以及图片上传
- 开始使用 Roland 吧,一款命令行随机选择工具
- iPhone开发之UIScrollView滚动组件的使用(七)利用NSTimer计时器和UIPageControl组件代码实现图片轮播器
- APP开发图标图片大小压缩工具
- iOS开发 使用NSURLConnection实现图片上传
- cocos2d-x 中的pvr.ccz压缩图片的使用方法【iOS游戏开发征文】
- Qt移动应用开发(三):使用精灵图片实现帧动画
- iOS开发中使用UIScrollView实现图片轮播和点击加载
- Android开发之使用Eclipse开发工具实现Android平台JNI的开发
- 内核开发之:使用图片分层技术实现窗口叠加
- 一款很牛逼的图片压缩工具
- Android使用libjpeg实现图片压缩——非常具有参考意义
- iOS开发使用sdWebImage实现对tableView的cell加载图片淡入动画
- Android开发之Toast工具类(实现带图片的Toast消息提示)
- 命令行下使用android SDK工具手工开发简单安卓小项目