@zhaoshijun/compress 1.3.0 → 1.4.1
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.
- package/README.md +127 -13
- package/bin/compress.js +4 -0
- package/package.json +1 -1
- package/src/config/defaults.js +1 -0
- package/src/core/compressor.js +5 -0
package/README.md
CHANGED
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
- ⚙️ **灵活配置**:支持配置文件 (`compress.config.js`),可精细控制压缩参数。
|
|
12
12
|
- 🛡 **安全可靠**:支持备份原文件,默认不覆盖源文件(CLI 模式输出到指定目录)。
|
|
13
13
|
- 📦 **智能缓存**:Vite 插件基于内容 Hash 缓存,避免重复压缩,提升构建速度。
|
|
14
|
-
- 💧
|
|
14
|
+
- 💧 **水印功能**:支持文本水印、图片水印(单个/平铺),可自定义透明度、位置、尺寸等参数。
|
|
15
|
+
- 🔒 **隐私保护**:默认去除图片元数据(拍摄时间、地点等),支持保留元数据选项。
|
|
15
16
|
|
|
16
17
|
## 安装
|
|
17
18
|
|
|
@@ -50,13 +51,30 @@ CLI 工具用于批量扫描并压缩本地图片文件。
|
|
|
50
51
|
| `--backup` | | 启用备份模式(将原文件复制为 `.backup`) |
|
|
51
52
|
| `--dry-run` | | 演练模式,仅列出将要处理的文件,不进行实际压缩和写入 |
|
|
52
53
|
| `--quiet` | `-q` | 静默模式,仅输出错误信息 |
|
|
53
|
-
| `--watermark` | `-w` |
|
|
54
|
-
| `--
|
|
55
|
-
| `--
|
|
56
|
-
| `--watermark-density <density>` | | 水印密度 (1-10) |
|
|
57
|
-
| `--watermark-color <color>` | | 水印颜色 (hex 或 rgba) |
|
|
54
|
+
| `--watermark` | `-w` | 启用水印(使用配置文件中的水印设置) |
|
|
55
|
+
| `--keep-metadata` | | 保留图片元数据(拍摄时间、地点等) |
|
|
56
|
+
| `--output <dir>` | `-o` | 输出目录 |
|
|
58
57
|
| `--help` | `-h` | 显示帮助信息 |
|
|
59
58
|
|
|
59
|
+
### 水印命令选项
|
|
60
|
+
|
|
61
|
+
| 选项 | 描述 |
|
|
62
|
+
| ---- | ---- |
|
|
63
|
+
| `--watermark-mode <mode>` | 水印模式 (text/image/tiled) (default: "text") |
|
|
64
|
+
| `--watermark-text <text>` | 水印文本 |
|
|
65
|
+
| `--watermark-image <path>` | 水印图片路径 |
|
|
66
|
+
| `--watermark-opacity <opacity>` | 水印透明度 (0-1) |
|
|
67
|
+
| `--watermark-density <density>` | 水印密度 (1-10) |
|
|
68
|
+
| `--watermark-color <color>` | 水印颜色 (hex 或 rgba) |
|
|
69
|
+
| `--watermark-font-size <size>` | 水印字体大小 |
|
|
70
|
+
| `--watermark-width <width>` | 水印图片宽度 |
|
|
71
|
+
| `--watermark-height <height>` | 水印图片高度 |
|
|
72
|
+
| `--watermark-position <position>` | 水印位置 (top-left/top-right/bottom-left/bottom-right/center/custom) |
|
|
73
|
+
| `--watermark-padding <padding>` | 水印边距 |
|
|
74
|
+
| `--watermark-angle <angle>` | 水印倾斜角度 |
|
|
75
|
+
| `--watermark-spacing-x <spacing>` | 水印水平间隔 |
|
|
76
|
+
| `--watermark-spacing-y <spacing>` | 水印垂直间隔 |
|
|
77
|
+
|
|
60
78
|
### 示例
|
|
61
79
|
|
|
62
80
|
```bash
|
|
@@ -66,40 +84,96 @@ npx @zhaoshijun/compress --dry-run
|
|
|
66
84
|
# 使用指定配置文件并开启静默模式
|
|
67
85
|
npx @zhaoshijun/compress -c ./config/compress.js -q
|
|
68
86
|
|
|
69
|
-
#
|
|
87
|
+
# 压缩图片并添加文本水印
|
|
70
88
|
npx @zhaoshijun/compress -w --watermark-text "Copyright 2024"
|
|
71
89
|
|
|
72
|
-
#
|
|
90
|
+
# 压缩图片并添加自定义文本水印
|
|
73
91
|
npx @zhaoshijun/compress -w --watermark-text "My Watermark" --watermark-opacity 0.3 --watermark-color "#ff0000"
|
|
92
|
+
|
|
93
|
+
# 压缩图片并添加图片水印
|
|
94
|
+
npx @zhaoshijun/compress -w --watermark-mode image --watermark-image "./logo.png"
|
|
95
|
+
|
|
96
|
+
# 压缩图片并添加平铺水印
|
|
97
|
+
npx @zhaoshijun/compress -w --watermark-mode tiled --watermark-image "./copyright.png"
|
|
98
|
+
|
|
99
|
+
# 压缩图片并保留元数据
|
|
100
|
+
npx @zhaoshijun/compress --keep-metadata
|
|
101
|
+
|
|
102
|
+
# 压缩图片并指定输出目录
|
|
103
|
+
npx @zhaoshijun/compress --output ./compressed
|
|
74
104
|
```
|
|
75
105
|
|
|
76
106
|
## 水印功能
|
|
77
107
|
|
|
108
|
+
支持三种水印模式:文本水印、单个图片水印、平铺图片水印。
|
|
109
|
+
|
|
78
110
|
### 单独添加水印
|
|
79
111
|
|
|
80
112
|
如果只需要给图片添加水印而不进行压缩,可以使用 `watermark` 命令:
|
|
81
113
|
|
|
82
114
|
```bash
|
|
83
|
-
#
|
|
115
|
+
# 文本水印
|
|
84
116
|
npx @zhaoshijun/compress watermark --watermark-text "Copyright 2024"
|
|
85
117
|
|
|
86
|
-
#
|
|
118
|
+
# 自定义文本水印参数
|
|
87
119
|
npx @zhaoshijun/compress watermark --watermark-text "Confidential" --watermark-opacity 0.7 --watermark-density 5 --watermark-color "rgba(255,0,0,0.5)"
|
|
88
120
|
|
|
121
|
+
# 单个图片水印
|
|
122
|
+
npx @zhaoshijun/compress watermark --watermark-mode image --watermark-image "./logo.png"
|
|
123
|
+
|
|
124
|
+
# 自定义图片水印位置和尺寸
|
|
125
|
+
npx @zhaoshijun/compress watermark --watermark-mode image --watermark-image "./brand-logo.png" --watermark-position bottom-right --watermark-padding 20 --watermark-opacity 1
|
|
126
|
+
|
|
127
|
+
# 平铺图片水印
|
|
128
|
+
npx @zhaoshijun/compress watermark --watermark-mode tiled --watermark-image "./copyright.png"
|
|
129
|
+
|
|
130
|
+
# 自定义平铺水印参数
|
|
131
|
+
npx @zhaoshijun/compress watermark --watermark-mode tiled --watermark-image "./copyright.png" --watermark-opacity 0.15 --watermark-width 100 --watermark-height 100 --watermark-angle -30 --watermark-spacing-x 300 --watermark-spacing-y 300
|
|
132
|
+
|
|
89
133
|
# 指定输出目录
|
|
90
134
|
npx @zhaoshijun/compress watermark --watermark-text "Watermark" --output ./output
|
|
91
135
|
```
|
|
92
136
|
|
|
93
137
|
### 水印参数说明
|
|
94
138
|
|
|
139
|
+
#### 文本水印参数
|
|
140
|
+
|
|
95
141
|
| 参数 | 说明 | 默认值 | 范围 |
|
|
96
142
|
| ---- | ---- | ------ | ---- |
|
|
143
|
+
| `mode` | 水印模式 | 'text' | text/image/tiled |
|
|
97
144
|
| `text` | 水印文本内容 | '' | 必填 |
|
|
98
|
-
| `opacity` | 水印透明度 |
|
|
145
|
+
| `opacity` | 水印透明度 | 1 | 0-1 |
|
|
99
146
|
| `density` | 水印密度(平铺数量) | 3 | 1-10 |
|
|
100
147
|
| `color` | 水印颜色 | '#ffffff' | hex 或 rgba |
|
|
101
148
|
| `fontSize` | 水印字体大小 | 24 | 正整数 |
|
|
102
149
|
|
|
150
|
+
#### 单个图片水印参数
|
|
151
|
+
|
|
152
|
+
| 参数 | 说明 | 默认值 | 范围 |
|
|
153
|
+
| ---- | ---- | ------ | ---- |
|
|
154
|
+
| `mode` | 水印模式 | 'text' | text/image/tiled |
|
|
155
|
+
| `imagePath` | 水印图片路径 | '' | 必填 |
|
|
156
|
+
| `opacity` | 水印透明度 | 1 | 0-1 |
|
|
157
|
+
| `width` | 水印宽度 | null | 正整数 |
|
|
158
|
+
| `height` | 水印高度 | null | 正整数 |
|
|
159
|
+
| `position` | 水印位置 | 'top-left' | top-left/top-right/bottom-left/bottom-right/center/custom |
|
|
160
|
+
| `padding` | 水印边距 | 10 | 正整数 |
|
|
161
|
+
| `x` | 自定义 X 坐标 | 0 | 正整数 |
|
|
162
|
+
| `y` | 自定义 Y 坐标 | 0 | 正整数 |
|
|
163
|
+
|
|
164
|
+
#### 平铺图片水印参数
|
|
165
|
+
|
|
166
|
+
| 参数 | 说明 | 默认值 | 范围 |
|
|
167
|
+
| ---- | ---- | ------ | ---- |
|
|
168
|
+
| `mode` | 水印模式 | 'text' | text/image/tiled |
|
|
169
|
+
| `imagePath` | 水印图片路径 | '' | 必填 |
|
|
170
|
+
| `opacity` | 水印透明度 | 1 | 0-1 |
|
|
171
|
+
| `width` | 水印宽度 | null | 正整数 |
|
|
172
|
+
| `height` | 水印高度 | null | 正整数 |
|
|
173
|
+
| `angle` | 倾斜角度 | -30 | -180 到 180 |
|
|
174
|
+
| `spacingX` | 水平间隔 | 100 | 正整数 |
|
|
175
|
+
| `spacingY` | 垂直间隔 | 100 | 正整数 |
|
|
176
|
+
|
|
103
177
|
## Vite 插件
|
|
104
178
|
|
|
105
179
|
该插件仅在 `vite build` 生产构建模式下生效,会自动压缩项目中引用的图片资源,并替换构建产物中的引用路径。
|
|
@@ -222,13 +296,27 @@ module.exports = {
|
|
|
222
296
|
// [CLI专用] 是否备份原文件
|
|
223
297
|
backup: false,
|
|
224
298
|
|
|
299
|
+
// 元数据处理
|
|
300
|
+
keepMetadata: false, // 是否保留图片元数据(拍摄时间、地点等),默认 false(去除元数据)
|
|
301
|
+
|
|
225
302
|
// 水印配置
|
|
226
303
|
watermark: {
|
|
304
|
+
mode: 'text', // 水印模式:text/image/tiled
|
|
227
305
|
text: '', // 水印文本内容,留空则不添加水印
|
|
228
|
-
|
|
306
|
+
imagePath: '', // 水印图片路径(image/tiled 模式)
|
|
307
|
+
opacity: 1, // 水印透明度 (0-1)
|
|
229
308
|
density: 3, // 水印密度 (1-10),数值越大水印越多
|
|
230
309
|
color: '#ffffff', // 水印颜色,支持 hex 或 rgba 格式
|
|
231
|
-
fontSize: 24 // 水印字体大小
|
|
310
|
+
fontSize: 24, // 水印字体大小
|
|
311
|
+
width: null, // 水印图片宽度(image/tiled 模式)
|
|
312
|
+
height: null, // 水印图片高度(image/tiled 模式)
|
|
313
|
+
position: 'top-left', // 水印位置(image 模式):top-left/top-right/bottom-left/bottom-right/center/custom
|
|
314
|
+
padding: 10, // 水印边距(image 模式)
|
|
315
|
+
x: 0, // 自定义 X 坐标(position 为 custom 时)
|
|
316
|
+
y: 0, // 自定义 Y 坐标(position 为 custom 时)
|
|
317
|
+
angle: -30, // 倾斜角度(tiled 模式)
|
|
318
|
+
spacingX: 100, // 水平间隔(tiled 模式)
|
|
319
|
+
spacingY: 100 // 垂直间隔(tiled 模式)
|
|
232
320
|
},
|
|
233
321
|
|
|
234
322
|
// [Vite插件专用] 配置
|
|
@@ -264,6 +352,12 @@ A: 不会。Vite 插件仅在构建过程中处理资源,生成的压缩图片
|
|
|
264
352
|
**Q: 水印会影响图片质量吗?**
|
|
265
353
|
A: 水印是在图片压缩后添加的,不会影响图片本身的压缩质量。水印的透明度可以通过 `opacity` 参数调整,建议设置为 0.3-0.7 之间以获得最佳效果。
|
|
266
354
|
|
|
355
|
+
**Q: 支持哪些水印模式?**
|
|
356
|
+
A: 支持三种水印模式:
|
|
357
|
+
- **文本水印**:添加文字水印,可自定义文本、颜色、字体大小等
|
|
358
|
+
- **单个图片水印**:在指定位置添加单个图片水印,支持 6 种预设位置和自定义坐标
|
|
359
|
+
- **平铺图片水印**:在整个图片上平铺水印图片,支持旋转和间隔设置
|
|
360
|
+
|
|
267
361
|
**Q: 水印密度如何设置?**
|
|
268
362
|
A: 水印密度 `density` 参数控制水印的平铺数量,范围是 1-10。数值越大,水印越密集。默认值为 3,适合大多数场景。
|
|
269
363
|
|
|
@@ -273,6 +367,26 @@ A: 可以。使用 `watermark` 命令可以单独给图片添加水印而不进
|
|
|
273
367
|
**Q: 水印颜色支持哪些格式?**
|
|
274
368
|
A: 水印颜色支持十六进制格式(如 `#ffffff`)和 RGBA 格式(如 `rgba(255,255,255,0.5)`)。
|
|
275
369
|
|
|
370
|
+
**Q: 图片水印支持哪些格式?**
|
|
371
|
+
A: 水印图片支持 JPEG、PNG、WebP、GIF、TIFF、SVG 等常见格式。
|
|
372
|
+
|
|
373
|
+
**Q: 如何去除图片元数据?**
|
|
374
|
+
A: 默认情况下,压缩图片时会自动去除所有元数据(包括拍摄时间、GPS 位置、相机信息等)。如果需要保留元数据,可以使用 `--keep-metadata` 选项或在配置文件中设置 `keepMetadata: true`。
|
|
375
|
+
|
|
376
|
+
**Q: 去除元数据有什么好处?**
|
|
377
|
+
A: 去除元数据有以下好处:
|
|
378
|
+
- **隐私保护**:防止拍摄时间、地点等敏感信息泄露
|
|
379
|
+
- **文件体积减小**:元数据占用额外空间,去除后文件更小
|
|
380
|
+
- **加载速度提升**:更小的文件加载更快
|
|
381
|
+
- **带宽节省**:减少网络传输数据量
|
|
382
|
+
|
|
383
|
+
**Q: 什么时候需要保留元数据?**
|
|
384
|
+
A: 以下场景可能需要保留元数据:
|
|
385
|
+
- 摄影作品集:需要保留拍摄参数和版权信息
|
|
386
|
+
- 图库上传:某些图库要求保留元数据
|
|
387
|
+
- 档案管理:需要记录拍摄时间和设备信息
|
|
388
|
+
- 法律要求:某些场景需要保留原始元数据
|
|
389
|
+
|
|
276
390
|
**Q: 如何选择合适的压缩选项?**
|
|
277
391
|
A: 不同格式有不同的压缩策略:
|
|
278
392
|
|
package/bin/compress.js
CHANGED
|
@@ -29,6 +29,8 @@ program
|
|
|
29
29
|
.option('--dry-run', '仅列出将处理的文件,不写入磁盘')
|
|
30
30
|
.option('-q, --quiet', '静默模式,仅输出错误')
|
|
31
31
|
.option('-w, --watermark', '启用水印')
|
|
32
|
+
.option('--keep-metadata', '保留图片元数据(拍摄时间、地点等)')
|
|
33
|
+
.option('-o, --output <dir>', '输出目录')
|
|
32
34
|
.action(async (options) => {
|
|
33
35
|
try {
|
|
34
36
|
const startTime = Date.now();
|
|
@@ -38,6 +40,8 @@ program
|
|
|
38
40
|
|
|
39
41
|
// 合并命令行选项
|
|
40
42
|
if (options.backup !== undefined) config.backup = options.backup;
|
|
43
|
+
if (options.keepMetadata !== undefined) config.keepMetadata = options.keepMetadata;
|
|
44
|
+
if (options.output !== undefined) config.output = options.output;
|
|
41
45
|
|
|
42
46
|
// 确定输入源
|
|
43
47
|
// 如果 config.input 未定义,则默认为当前目录 '**/*.{jpg,jpeg,png,webp}'
|
package/package.json
CHANGED
package/src/config/defaults.js
CHANGED
package/src/core/compressor.js
CHANGED