pixcraft 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pixcraft-0.1.0/MANIFEST.in +3 -0
- pixcraft-0.1.0/PKG-INFO +216 -0
- pixcraft-0.1.0/README.md +180 -0
- pixcraft-0.1.0/docs//344/273/273/345/212/241/346/270/205/345/215/225.md +83 -0
- pixcraft-0.1.0/docs//351/234/200/346/261/202/346/226/207/346/241/243.md +270 -0
- pixcraft-0.1.0/pixcraft/__init__.py +3 -0
- pixcraft-0.1.0/pixcraft/cli.py +103 -0
- pixcraft-0.1.0/pixcraft/compress.py +123 -0
- pixcraft-0.1.0/pixcraft/convert.py +89 -0
- pixcraft-0.1.0/pixcraft/info.py +126 -0
- pixcraft-0.1.0/pixcraft/resize.py +115 -0
- pixcraft-0.1.0/pixcraft/strip.py +64 -0
- pixcraft-0.1.0/pixcraft/utils.py +142 -0
- pixcraft-0.1.0/pixcraft.egg-info/PKG-INFO +216 -0
- pixcraft-0.1.0/pixcraft.egg-info/SOURCES.txt +28 -0
- pixcraft-0.1.0/pixcraft.egg-info/dependency_links.txt +1 -0
- pixcraft-0.1.0/pixcraft.egg-info/entry_points.txt +2 -0
- pixcraft-0.1.0/pixcraft.egg-info/requires.txt +2 -0
- pixcraft-0.1.0/pixcraft.egg-info/top_level.txt +2 -0
- pixcraft-0.1.0/pyproject.toml +3 -0
- pixcraft-0.1.0/requirements.txt +2 -0
- pixcraft-0.1.0/setup.cfg +4 -0
- pixcraft-0.1.0/setup.py +44 -0
- pixcraft-0.1.0/tests/__init__.py +0 -0
- pixcraft-0.1.0/tests/test_compress.py +310 -0
- pixcraft-0.1.0/tests/test_convert.py +231 -0
- pixcraft-0.1.0/tests/test_edge_cases.py +262 -0
- pixcraft-0.1.0/tests/test_info.py +82 -0
- pixcraft-0.1.0/tests/test_resize.py +246 -0
- pixcraft-0.1.0/tests/test_strip.py +210 -0
pixcraft-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pixcraft
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: 本地批量图片处理 CLI 工具——压缩、转格式、改尺寸、去信息,一行命令搞定
|
|
5
|
+
Home-page: https://github.com/your-org/pixcraft
|
|
6
|
+
Author: PixCraft
|
|
7
|
+
Project-URL: Bug Tracker, https://github.com/your-org/pixcraft/issues
|
|
8
|
+
Project-URL: Source Code, https://github.com/your-org/pixcraft
|
|
9
|
+
Keywords: image,compress,convert,resize,cli,batch,webp,avif,exif
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Environment :: Console
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Multimedia :: Graphics
|
|
21
|
+
Classifier: Topic :: Utilities
|
|
22
|
+
Requires-Python: >=3.10
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
Requires-Dist: click>=8.0.0
|
|
25
|
+
Requires-Dist: Pillow>=10.0.0
|
|
26
|
+
Dynamic: author
|
|
27
|
+
Dynamic: classifier
|
|
28
|
+
Dynamic: description
|
|
29
|
+
Dynamic: description-content-type
|
|
30
|
+
Dynamic: home-page
|
|
31
|
+
Dynamic: keywords
|
|
32
|
+
Dynamic: project-url
|
|
33
|
+
Dynamic: requires-dist
|
|
34
|
+
Dynamic: requires-python
|
|
35
|
+
Dynamic: summary
|
|
36
|
+
|
|
37
|
+
# PixCraft
|
|
38
|
+
|
|
39
|
+
**批量处理图片的命令行工具。压缩、转格式、改尺寸、清除元数据,一条命令的事。**
|
|
40
|
+
|
|
41
|
+
写这个工具的原因很简单——每次要批量压缩图片就得打开 TinyPNG 网页,或者翻出 Photoshop 脚本,太烦了。PixCraft 把这些操作全部搬到了终端里。
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 安装
|
|
46
|
+
|
|
47
|
+
Python 3.10 以上,依赖 Click 和 Pillow,pip 会自动装好。
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
pip install pixcraft
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
也可以从源码装:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
git clone https://github.com/your-org/pixcraft.git
|
|
57
|
+
cd pixcraft
|
|
58
|
+
pip install .
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 快速开始
|
|
64
|
+
|
|
65
|
+
五个命令,覆盖最常见的图片处理需求:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# 批量压缩到 500KB 以内
|
|
69
|
+
pixcraft compress ./images/ -s 500k
|
|
70
|
+
|
|
71
|
+
# 整个目录转 WebP
|
|
72
|
+
pixcraft convert ./images/ -t webp
|
|
73
|
+
|
|
74
|
+
# 等比缩放到 1200 宽
|
|
75
|
+
pixcraft resize hero.jpg -w 1200
|
|
76
|
+
|
|
77
|
+
# 清除 EXIF/GPS/相机信息
|
|
78
|
+
pixcraft strip ./photos/
|
|
79
|
+
|
|
80
|
+
# 查看图片详情
|
|
81
|
+
pixcraft info photo.jpg
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 命令详解
|
|
87
|
+
|
|
88
|
+
### pixcraft compress
|
|
89
|
+
|
|
90
|
+
压缩图片。可以指定质量,也可以指定目标文件大小让工具自己找最佳参数。
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
pixcraft compress <PATH> [OPTIONS]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
| 选项 | 类型 | 默认值 | 说明 |
|
|
97
|
+
|------|------|--------|------|
|
|
98
|
+
| `-q, --quality` | int | `85` | 压缩质量 1-100,越大质量越好,文件也越大 |
|
|
99
|
+
| `-s, --max-size` | str | — | 目标文件大小上限,比如 `500k`、`5mb`。指定后自动二分搜索找最佳质量值 |
|
|
100
|
+
| `-o, --output` | path | `./pixcraft-output` | 输出目录 |
|
|
101
|
+
| `-f, --format` | str | — | 输出格式(`jpg`/`png`/`webp`/`avif`),不指定就用原格式 |
|
|
102
|
+
| `--no-resize` | flag | `false` | 禁止自动缩小尺寸,只靠降低质量来压缩 |
|
|
103
|
+
|
|
104
|
+
几个默认行为值得注意:
|
|
105
|
+
|
|
106
|
+
- `PATH` 可以是单个文件或目录,目录会递归处理
|
|
107
|
+
- 默认把图片最长边缩到 2000px,防止超大尺寸撑爆文件体积
|
|
108
|
+
- 指定 `--max-size` 时用二分搜索找质量值,比你自己试快得多
|
|
109
|
+
- 质量降到最低还是超的话,会自动逐级缩小尺寸(2000px → 1000px → 500px)
|
|
110
|
+
|
|
111
|
+
### pixcraft convert
|
|
112
|
+
|
|
113
|
+
JPG、PNG、WebP、AVIF 四种格式互转。
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
pixcraft convert <PATH> -t <TARGET_FORMAT> [OPTIONS]
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
| 选项 | 类型 | 默认值 | 说明 |
|
|
120
|
+
|------|------|--------|------|
|
|
121
|
+
| `-t, --to` | str | **必填** | 目标格式(`jpg`/`png`/`webp`/`avif`) |
|
|
122
|
+
| `-q, --quality` | int | `85` | 输出质量,只对 jpg/webp/avif 生效 |
|
|
123
|
+
| `-o, --output` | path | `./pixcraft-output` | 输出目录 |
|
|
124
|
+
| `--lossless` | flag | `false` | 无损模式,目前只支持 PNG → WebP |
|
|
125
|
+
|
|
126
|
+
转换时会做一些自动处理,防止出问题:
|
|
127
|
+
|
|
128
|
+
- PNG → JPG 会自动填白色背景(透明区域没法往 JPG 里塞)
|
|
129
|
+
- JPG → PNG 直接拒绝,JPG 已经有损了,转 PNG 只是浪费空间
|
|
130
|
+
- PNG → WebP 加 `--lossless` 能保留透明通道
|
|
131
|
+
- 其他方向正常转
|
|
132
|
+
|
|
133
|
+
### pixcraft resize
|
|
134
|
+
|
|
135
|
+
四种缩放模式,比 ImageMagick 的参数好记多了。
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
pixcraft resize <PATH> [OPTIONS]
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
| 选项 | 类型 | 默认值 | 说明 |
|
|
142
|
+
|------|------|--------|------|
|
|
143
|
+
| `-w, --width` | int | — | 目标宽度,高度自动按比例算 |
|
|
144
|
+
| `-h, --height` | int | — | 目标高度,宽度自动按比例算 |
|
|
145
|
+
| `--fit` | str | — | 适配尺寸如 `1200x630`,图片完整显示,空白处填白 |
|
|
146
|
+
| `--fill` | str | — | 填充尺寸如 `1200x630`,铺满区域,超出居中裁剪 |
|
|
147
|
+
| `--scale` | float | — | 缩放倍数,`0.5` 就是缩小一半 |
|
|
148
|
+
| `-o, --output` | path | `./pixcraft-output` | 输出目录 |
|
|
149
|
+
|
|
150
|
+
四种模式:
|
|
151
|
+
|
|
152
|
+
- `-w` / `-h`:等比缩放。只给一个边就自动算另一边,两个都给就按固定尺寸来
|
|
153
|
+
- `--fit`:把图片塞进指定区域,保持比例,留白不裁剪
|
|
154
|
+
- `--fill`:填满指定区域,保持比例,多出来的裁掉
|
|
155
|
+
- `--scale`:直接按倍数缩放,最简单直接
|
|
156
|
+
|
|
157
|
+
### pixcraft strip
|
|
158
|
+
|
|
159
|
+
清除元数据,保护隐私。去掉 EXIF、GPS 坐标、相机型号、拍摄时间。
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
pixcraft strip <PATH> [OPTIONS]
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
| 选项 | 类型 | 默认值 | 说明 |
|
|
166
|
+
|------|------|--------|------|
|
|
167
|
+
| `-o, --output` | path | — | 输出目录,不指定就覆盖原文件 |
|
|
168
|
+
|
|
169
|
+
在社交媒体发照片之前跑一下这个命令,就不用担心别人从 EXIF 里读到你家的 GPS 坐标了。
|
|
170
|
+
|
|
171
|
+
### pixcraft info
|
|
172
|
+
|
|
173
|
+
查看图片的详细信息。
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
pixcraft info <PATH>
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
> 只接受单个文件,不支持目录。
|
|
180
|
+
|
|
181
|
+
会输出这些内容:文件名、格式、尺寸、文件大小、颜色模式,还有 EXIF 里藏的各种信息(相机型号、拍摄时间、GPS 等)。
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## 输出示例
|
|
186
|
+
|
|
187
|
+
批量处理时会逐文件显示状态和体积变化:
|
|
188
|
+
|
|
189
|
+
```text
|
|
190
|
+
✓ hero.jpg (4.2MB -> 0.3MB)
|
|
191
|
+
✓ photo.png (2.1MB -> 0.5MB)
|
|
192
|
+
✓ banner.webp (1.8MB -> 0.4MB)
|
|
193
|
+
✗ broken.jpg (无法读取,已跳过)
|
|
194
|
+
|
|
195
|
+
处理完成:3/4 个文件,节省 6.9MB
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
成功打勾,失败打叉并附原因,最后汇总成功数和节省的总体积。
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## 测试
|
|
203
|
+
|
|
204
|
+
```text
|
|
205
|
+
89 passed in 4.24s
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## 开源协议
|
|
211
|
+
|
|
212
|
+
MIT License
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
PixCraft —— 给开发者用的命令行版 TinyPNG。
|
pixcraft-0.1.0/README.md
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# PixCraft
|
|
2
|
+
|
|
3
|
+
**批量处理图片的命令行工具。压缩、转格式、改尺寸、清除元数据,一条命令的事。**
|
|
4
|
+
|
|
5
|
+
写这个工具的原因很简单——每次要批量压缩图片就得打开 TinyPNG 网页,或者翻出 Photoshop 脚本,太烦了。PixCraft 把这些操作全部搬到了终端里。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 安装
|
|
10
|
+
|
|
11
|
+
Python 3.10 以上,依赖 Click 和 Pillow,pip 会自动装好。
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pip install pixcraft
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
也可以从源码装:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
git clone https://github.com/your-org/pixcraft.git
|
|
21
|
+
cd pixcraft
|
|
22
|
+
pip install .
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 快速开始
|
|
28
|
+
|
|
29
|
+
五个命令,覆盖最常见的图片处理需求:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# 批量压缩到 500KB 以内
|
|
33
|
+
pixcraft compress ./images/ -s 500k
|
|
34
|
+
|
|
35
|
+
# 整个目录转 WebP
|
|
36
|
+
pixcraft convert ./images/ -t webp
|
|
37
|
+
|
|
38
|
+
# 等比缩放到 1200 宽
|
|
39
|
+
pixcraft resize hero.jpg -w 1200
|
|
40
|
+
|
|
41
|
+
# 清除 EXIF/GPS/相机信息
|
|
42
|
+
pixcraft strip ./photos/
|
|
43
|
+
|
|
44
|
+
# 查看图片详情
|
|
45
|
+
pixcraft info photo.jpg
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 命令详解
|
|
51
|
+
|
|
52
|
+
### pixcraft compress
|
|
53
|
+
|
|
54
|
+
压缩图片。可以指定质量,也可以指定目标文件大小让工具自己找最佳参数。
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
pixcraft compress <PATH> [OPTIONS]
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
| 选项 | 类型 | 默认值 | 说明 |
|
|
61
|
+
|------|------|--------|------|
|
|
62
|
+
| `-q, --quality` | int | `85` | 压缩质量 1-100,越大质量越好,文件也越大 |
|
|
63
|
+
| `-s, --max-size` | str | — | 目标文件大小上限,比如 `500k`、`5mb`。指定后自动二分搜索找最佳质量值 |
|
|
64
|
+
| `-o, --output` | path | `./pixcraft-output` | 输出目录 |
|
|
65
|
+
| `-f, --format` | str | — | 输出格式(`jpg`/`png`/`webp`/`avif`),不指定就用原格式 |
|
|
66
|
+
| `--no-resize` | flag | `false` | 禁止自动缩小尺寸,只靠降低质量来压缩 |
|
|
67
|
+
|
|
68
|
+
几个默认行为值得注意:
|
|
69
|
+
|
|
70
|
+
- `PATH` 可以是单个文件或目录,目录会递归处理
|
|
71
|
+
- 默认把图片最长边缩到 2000px,防止超大尺寸撑爆文件体积
|
|
72
|
+
- 指定 `--max-size` 时用二分搜索找质量值,比你自己试快得多
|
|
73
|
+
- 质量降到最低还是超的话,会自动逐级缩小尺寸(2000px → 1000px → 500px)
|
|
74
|
+
|
|
75
|
+
### pixcraft convert
|
|
76
|
+
|
|
77
|
+
JPG、PNG、WebP、AVIF 四种格式互转。
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
pixcraft convert <PATH> -t <TARGET_FORMAT> [OPTIONS]
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
| 选项 | 类型 | 默认值 | 说明 |
|
|
84
|
+
|------|------|--------|------|
|
|
85
|
+
| `-t, --to` | str | **必填** | 目标格式(`jpg`/`png`/`webp`/`avif`) |
|
|
86
|
+
| `-q, --quality` | int | `85` | 输出质量,只对 jpg/webp/avif 生效 |
|
|
87
|
+
| `-o, --output` | path | `./pixcraft-output` | 输出目录 |
|
|
88
|
+
| `--lossless` | flag | `false` | 无损模式,目前只支持 PNG → WebP |
|
|
89
|
+
|
|
90
|
+
转换时会做一些自动处理,防止出问题:
|
|
91
|
+
|
|
92
|
+
- PNG → JPG 会自动填白色背景(透明区域没法往 JPG 里塞)
|
|
93
|
+
- JPG → PNG 直接拒绝,JPG 已经有损了,转 PNG 只是浪费空间
|
|
94
|
+
- PNG → WebP 加 `--lossless` 能保留透明通道
|
|
95
|
+
- 其他方向正常转
|
|
96
|
+
|
|
97
|
+
### pixcraft resize
|
|
98
|
+
|
|
99
|
+
四种缩放模式,比 ImageMagick 的参数好记多了。
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
pixcraft resize <PATH> [OPTIONS]
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
| 选项 | 类型 | 默认值 | 说明 |
|
|
106
|
+
|------|------|--------|------|
|
|
107
|
+
| `-w, --width` | int | — | 目标宽度,高度自动按比例算 |
|
|
108
|
+
| `-h, --height` | int | — | 目标高度,宽度自动按比例算 |
|
|
109
|
+
| `--fit` | str | — | 适配尺寸如 `1200x630`,图片完整显示,空白处填白 |
|
|
110
|
+
| `--fill` | str | — | 填充尺寸如 `1200x630`,铺满区域,超出居中裁剪 |
|
|
111
|
+
| `--scale` | float | — | 缩放倍数,`0.5` 就是缩小一半 |
|
|
112
|
+
| `-o, --output` | path | `./pixcraft-output` | 输出目录 |
|
|
113
|
+
|
|
114
|
+
四种模式:
|
|
115
|
+
|
|
116
|
+
- `-w` / `-h`:等比缩放。只给一个边就自动算另一边,两个都给就按固定尺寸来
|
|
117
|
+
- `--fit`:把图片塞进指定区域,保持比例,留白不裁剪
|
|
118
|
+
- `--fill`:填满指定区域,保持比例,多出来的裁掉
|
|
119
|
+
- `--scale`:直接按倍数缩放,最简单直接
|
|
120
|
+
|
|
121
|
+
### pixcraft strip
|
|
122
|
+
|
|
123
|
+
清除元数据,保护隐私。去掉 EXIF、GPS 坐标、相机型号、拍摄时间。
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
pixcraft strip <PATH> [OPTIONS]
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
| 选项 | 类型 | 默认值 | 说明 |
|
|
130
|
+
|------|------|--------|------|
|
|
131
|
+
| `-o, --output` | path | — | 输出目录,不指定就覆盖原文件 |
|
|
132
|
+
|
|
133
|
+
在社交媒体发照片之前跑一下这个命令,就不用担心别人从 EXIF 里读到你家的 GPS 坐标了。
|
|
134
|
+
|
|
135
|
+
### pixcraft info
|
|
136
|
+
|
|
137
|
+
查看图片的详细信息。
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
pixcraft info <PATH>
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
> 只接受单个文件,不支持目录。
|
|
144
|
+
|
|
145
|
+
会输出这些内容:文件名、格式、尺寸、文件大小、颜色模式,还有 EXIF 里藏的各种信息(相机型号、拍摄时间、GPS 等)。
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 输出示例
|
|
150
|
+
|
|
151
|
+
批量处理时会逐文件显示状态和体积变化:
|
|
152
|
+
|
|
153
|
+
```text
|
|
154
|
+
✓ hero.jpg (4.2MB -> 0.3MB)
|
|
155
|
+
✓ photo.png (2.1MB -> 0.5MB)
|
|
156
|
+
✓ banner.webp (1.8MB -> 0.4MB)
|
|
157
|
+
✗ broken.jpg (无法读取,已跳过)
|
|
158
|
+
|
|
159
|
+
处理完成:3/4 个文件,节省 6.9MB
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
成功打勾,失败打叉并附原因,最后汇总成功数和节省的总体积。
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## 测试
|
|
167
|
+
|
|
168
|
+
```text
|
|
169
|
+
89 passed in 4.24s
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 开源协议
|
|
175
|
+
|
|
176
|
+
MIT License
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
PixCraft —— 给开发者用的命令行版 TinyPNG。
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# PixCraft MVP 任务清单
|
|
2
|
+
|
|
3
|
+
> 基于需求文档 v1.0,按可并行启动维度组织
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 第一梯队(可同时启动)
|
|
8
|
+
|
|
9
|
+
项目骨架搭好后,以下 7 个任务互不依赖,可并行开发:
|
|
10
|
+
|
|
11
|
+
| # | 任务 | 产出文件 | 说明 |
|
|
12
|
+
|---|------|----------|------|
|
|
13
|
+
| 1 | **项目骨架搭建** | 目录结构、`setup.py`、`requirements.txt`、`__init__.py` | 所有模块的前置依赖 |
|
|
14
|
+
| 2 | **CLI 主入口** | `pixcraft/cli.py` | Click 命令组、参数解析、帮助信息 |
|
|
15
|
+
| 3 | **公共工具模块** | `pixcraft/utils.py` | 文件遍历、图片识别、进度显示、二分搜索算法 |
|
|
16
|
+
| 4 | **压缩模块** | `pixcraft/compress.py` | `compress` 命令,质量压缩 + 目标大小二分搜索 + 自适应缩小尺寸 |
|
|
17
|
+
| 5 | **格式转换模块** | `pixcraft/convert.py` | `convert` 命令,JPG/PNG/WebP/AVIF 互转 + 透明通道处理 |
|
|
18
|
+
| 6 | **尺寸调整模块** | `pixcraft/resize.py` | `resize` 命令,等比/适配(fit)/填充(fill)/倍数缩放 |
|
|
19
|
+
| 7 | **信息清除模块** | `pixcraft/strip.py` | `strip` 命令,EXIF/GPS/相机型号清除 |
|
|
20
|
+
| 8 | **信息查看模块** | `pixcraft/info.py` | `info` 命令,尺寸/大小/格式/EXIF/颜色模式显示 |
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 第二梯队(模块就绪后并行启动)
|
|
25
|
+
|
|
26
|
+
| # | 任务 | 说明 |
|
|
27
|
+
|---|------|------|
|
|
28
|
+
| 9 | **压缩模块测试** | 单文件压缩、批量压缩、max-size 二分搜索正确性 |
|
|
29
|
+
| 10 | **格式转换模块测试** | 各方向转换正确性、透明通道保留、JPG→PNG 报错验证 |
|
|
30
|
+
| 11 | **尺寸调整模块测试** | 等比缩放、fit/fill/scale 参数正确性 |
|
|
31
|
+
| 12 | **信息清除模块测试** | EXIF 清除完整性、非图片文件跳过 |
|
|
32
|
+
| 13 | **信息查看模块测试** | 各格式图片信息读取正确性 |
|
|
33
|
+
| 14 | **边界情况测试** | 损坏图片、超大文件、50 张批量不崩溃、空目录 |
|
|
34
|
+
| 15 | **README 文档** | 使用说明 + Demo GIF + 安装指南 |
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 第三梯队(测试通过后启动)
|
|
39
|
+
|
|
40
|
+
| # | 任务 | 说明 |
|
|
41
|
+
|---|------|------|
|
|
42
|
+
| 16 | **PyInstaller 打包** | 单文件 .exe,目标:不含 Python 环境可运行 |
|
|
43
|
+
| 17 | **PyPI 发布准备** | `setup.py` 完善、版本号、`pip install pixcraft` |
|
|
44
|
+
| 18 | **GitHub 开源发布** | 仓库准备、开源协议(MIT)、推广文章 |
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 并行度总览
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
第一梯队(8 个任务)
|
|
52
|
+
├── #1 项目骨架 ──→ 阻塞 #2~#8
|
|
53
|
+
└── #2~#8 ──────────→ 全部可同时启动(#2/#3 先完成以支撑 #4~#8)
|
|
54
|
+
|
|
55
|
+
第二梯队(7 个任务)
|
|
56
|
+
└── #9~#15 ──────────→ 全部可同时启动
|
|
57
|
+
|
|
58
|
+
第三梯队(3 个任务)
|
|
59
|
+
└── #16~#18 ──────────→ 顺序执行
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 进度记录
|
|
63
|
+
|
|
64
|
+
| 任务 | 状态 | 完成日期 |
|
|
65
|
+
|------|------|----------|
|
|
66
|
+
| #1 项目骨架搭建 | ✅ 已完成 | 2026-06-10 |
|
|
67
|
+
| #2 CLI 主入口 | ✅ 已完成 | 2026-06-10 |
|
|
68
|
+
| #3 公共工具模块 | ✅ 已完成 | 2026-06-10 |
|
|
69
|
+
| #4 压缩模块 | ✅ 已完成 | 2026-06-10 |
|
|
70
|
+
| #5 格式转换模块 | ✅ 已完成 | 2026-06-10 |
|
|
71
|
+
| #6 尺寸调整模块 | ✅ 已完成 | 2026-06-10 |
|
|
72
|
+
| #7 信息清除模块 | ✅ 已完成 | 2026-06-10 |
|
|
73
|
+
| #8 信息查看模块 | ✅ 已完成 | 2026-06-10 |
|
|
74
|
+
| #9 压缩模块测试 | ✅ 已完成 | 2026-06-10 |
|
|
75
|
+
| #10 格式转换模块测试 | ✅ 已完成 | 2026-06-10 |
|
|
76
|
+
| #11 尺寸调整模块测试 | ✅ 已完成 | 2026-06-10 |
|
|
77
|
+
| #12 信息清除模块测试 | ✅ 已完成 | 2026-06-10 |
|
|
78
|
+
| #13 信息查看模块测试 | ✅ 已完成 | 2026-06-10 |
|
|
79
|
+
| #14 边界情况测试 | ✅ 已完成 | 2026-06-10 |
|
|
80
|
+
| #15 README 文档 | ✅ 已完成 | 2026-06-10 |
|
|
81
|
+
| #16 PyInstaller 打包 | ✅ 已完成 | 2026-06-11 |
|
|
82
|
+
| #17 PyPI 发布准备 | ⬜ 待开始 | - |
|
|
83
|
+
| #18 GitHub 开源发布 | ⬜ 待开始 | - |
|