关于 gimp-inkscape
为本地图片制作与处理提供工具选择指南和命令参考,面向需要编辑、转换或优化图像的用户。涵盖 ImageMagick、GIMP、Inkscape 等工具的适用任务及批处理示例。
主要功能
- 01按任务选择图像工具
- 02转换与批量缩放图像
- 03编辑图层与调整颜色
- 04导出 SVG、PDF 和动画
- 05压缩文件并处理元数据
适用场景
- 01批量调整文件夹中的图片尺寸
- 02将 SVG 或 PDF 页面导出为图像
- 03为图片添加文字、图层或水印
- 04发布前压缩图像并清除元数据
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ ramon-webdevpro-nl/ claude-skills --skill gimp-inkscape安装后在 Claude Code 中输入/gimp-inkscape确认已加载。
详细介绍
GIMP + Inkscape + ImageMagick 图像技能
本地创建和处理图像。无需 API 调用、无需付费,也无需联网。
决策指南——选择合适的工具
| 任务 | 使用 | 备注 |
|---|---|---|
| 简单调整尺寸 | ImageMagick | 比 GIMP 快 10 倍,只需一行命令 |
| 批量调整整个文件夹的图像尺寸 | ImageMagick mogrify | 专为批量处理设计 |
| SVG → PNG | Inkscape | 矢量质量,尺寸精确 |
| 添加文字覆盖层/水印 | ImageMagick | 可靠;GIMP Script-Fu 文字功能不稳定 |
| 复杂排版 | Inkscape SVG | 矢量文字,像素级精准 |
| 格式转换 | ImageMagick | 一行命令,也支持 WebP |
| 合成/图层 | GIMP | 全面的图层控制 |
| 色彩校正 | GIMP | 曲线/色阶控制比 IM 更精准 |
| PNG 压缩 | OptiPNG | 无损,节省 20–50% |
| JPEG 压缩 | jpegoptim | 无损重新压缩 |
| 读取/剥离元数据 | ExifTool | 行业标准 |
| GIF/动画 | FFmpeg | 其他工具都无法处理 |
| PDF → 图像 | pdftoppm | 输出干净,可控制 DPI |
| 照片编辑(高级) | GIMP | 修复、仿制图章、曲线 |
两项特定任务的可选安装
- 移除背景:
pip install rembg然后运行rembg i input.png output.png - AI 放大: Real-ESRGAN——相比插值放大,画质提升显著
ImageMagick——命令行参考
格式转换
convert input.png output.jpg
convert input.jpg output.webp
convert input.png -quality 92 output.jpg
调整尺寸
# Exact dimensions (may distort)
convert input.jpg -resize 1200x630! output.jpg
# Fit within box (preserves aspect ratio)
convert input.jpg -resize 1200x630 output.jpg
# Fill and crop to exact dimensions (centered)
convert input.jpg -resize 1200x630^ -gravity Center -extent 1200x630 output.jpg
批量调整整个文件夹的图像尺寸(mogrify)
# Resize all JPEGs in place
mogrify -resize 800x600 /path/to/folder/*.jpg
# Resize and output to a different folder
mogrify -resize 800x600 -path /output/folder /input/folder/*.jpg
# Convert all PNGs to WebP
mogrify -format webp /path/to/folder/*.png
添加文字覆盖层/水印
# Simple text in bottom-right corner
convert input.jpg \
-font DejaVu-Sans -pointsize 36 \
-fill white -annotate +20+40 "© ReshareAI" \
output.jpg
# Centered text with shadow
convert input.jpg \
-font DejaVu-Sans-Bold -pointsize 72 \
-fill black -annotate +202+302 "Headline" \
-fill white -annotate +200+300 "Headline" \
output.jpg
# Semi-transparent watermark tiled across image
convert input.jpg \
-font DejaVu-Sans -pointsize 48 -fill "rgba(255,255,255,0.3)" \
-gravity Center -annotate 30x30+0+0 "WATERMARK" \
output.jpg
合成:将徽标/图像置于上层
# Place logo.png bottom-right with 10px padding
convert base.jpg \
logo.png \
-gravity SouthEast -geometry +10+10 \
-composite output.jpg
# Place with opacity
convert base.jpg \
\( logo.png -alpha set -channel Alpha -evaluate multiply 0.5 \) \
-gravity Center -composite output.jpg
色彩调整
# Brightness / contrast
convert input.jpg -brightness-contrast 10x20 output.jpg
# Saturation
convert input.jpg -modulate 100,130,100 output.jpg
# Grayscale
convert input.jpg -colorspace Gray output.jpg
# Sharpen
convert input.jpg -unsharp 0x1 output.jpg
获取图像信息
identify input.jpg
identify -verbose input.jpg | grep -E "Geometry|Colorspace|Format|filesize"
ImageMagick——WebP
ImageMagick 内置了 WebP 委托程序(已在此系统上确认):
# PNG/JPEG → WebP
convert input.png -quality 85 output.webp
# WebP → PNG
convert input.webp output.png
# Batch convert all JPEGs to WebP
mogrify -format webp -quality 85 /path/to/folder/*.jpg
FFmpeg——GIF 与动画
视频 → GIF
# Basic
ffmpeg -i input.mp4 -vf "fps=10,scale=800:-1" output.gif
# High quality (uses palette)
ffmpeg -i input.mp4 -vf "fps=12,scale=800:-1:flags=lanczos,palettegen" palette.png
ffmpeg -i input.mp4 -i palette.png -vf "fps=12,scale=800:-1:flags=lanczos,paletteuse" output.gif
# Clip a section (start 5s, duration 3s)
ffmpeg -ss 5 -t 3 -i input.mp4 -vf "fps=10,scale=600:-1" output.gif
从视频中提取帧
# Extract every frame as PNG
ffmpeg -i input.mp4 /output/frame_%04d.png
# Extract 1 frame per second
ffmpeg -i input.mp4 -vf fps=1 /output/frame_%04d.png
# Extract a single frame at timestamp
ffmpeg -ss 00:00:05 -i input.mp4 -frames:v 1 output.png
图像序列 → 视频或 GIF
# Frames → MP4
ffmpeg -framerate 24 -i frame_%04d.png -c:v libx264 output.mp4
# Frames → GIF
ffmpeg -framerate 10 -i frame_%04d.png output.gif
ExifTool——元数据
读取元数据
exiftool input.jpg
exiftool -s input.jpg # short tag names
exiftool -ImageSize -DateTimeOriginal input.jpg # specific fields
剥离所有元数据(隐私/发布前)
exiftool -all= input.jpg # strips in place (saves backup)
exiftool -all= -overwrite_original input.jpg # no backup
exiftool -all= -overwrite_original /folder/*.jpg # batch strip
将一个文件的 EXIF 复制到另一个文件
exiftool -TagsFromFile source.jpg target.jpg
写入元数据
exiftool -Artist="Ramon" -Copyright="© 2026 ReshareAI" input.jpg
exiftool -all= -overwrite_original -Artist="Ramon" /folder/*.jpg
OptiPNG——无损 PNG 压缩
# Optimize (overwrites in place, creates backup .bak)
optipng input.png
# No backup
optipng -o 7 input.png # -o 7 is max compression (slower)
# Output to new file
optipng -out output.png input.png
# Batch
optipng /path/to/folder/*.png
# Check savings without writing
optipng -simulate input.png
通常可在画质零损失的情况下,将文件大小减少 20–50%。
jpegoptim——无损 JPEG 压缩
# Lossless optimization (in place)
jpegoptim input.jpg
# With target file size
jpegoptim --size=200k input.jpg
# Strip all metadata + optimize
jpegoptim --strip-all input.jpg
# Batch (folder)
jpegoptim /path/to/folder/*.jpg
# Batch with max quality floor
jpegoptim --max=90 /path/to/folder/*.jpg
Poppler——PDF → 图像
# All pages → PNG at 150 DPI (output: file-000001.png, file-000002.png ...)
pdftoppm -r 150 -png input.pdf /output/page
# All pages → JPEG
pdftoppm -r 150 -jpeg input.pdf /output/page
# Single page (page 1 only)
pdftoppm -r 300 -png -f 1 -l 1 input.pdf /output/page
# High DPI for print-quality extraction
pdftoppm -r 300 -png input.pdf /output/page
Inkscape——命令行参考
将 SVG 导出为 PNG(尺寸精确)
inkscape input.svg \
--export-type=png \
--export-filename=output.png \
--export-width=1200 \
--export-height=630
导出指定图层
inkscape input.svg \
--export-type=png \
--export-filename=output.png \
--export-id=layer1 \
--export-id-only
SVG → PDF
inkscape input.svg --export-type=pdf --export-filename=output.pdf
从头创建 SVG(编写文件后再导出)
使用 Write 工具编写 .svg 文件,然后用 Inkscape 导出。SVG 模板:
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1200" height="630" viewBox="0 0 1200 630"
xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#4C1D95"/>
<stop offset="100%" style="stop-color:#1E1B4B"/>
</linearGradient>
</defs>
<rect width="1200" height="630" fill="url(#bg)"/>
<text x="100" y="280"
font-family="Inter, Arial, sans-serif"
font-size="96" font-weight="700"
fill="white">BrandName</text>
<text x="100" y="360"
font-family="Inter, Arial, sans-serif"
font-size="32" fill="rgba(255,255,255,0.7)">Tagline goes here</text>
</svg>
GIMP——Script-Fu 批处理参考
适合使用 GIMP 的任务:合成、色彩校正、照片编辑、Alpha 通道处理。简单任务优先使用 ImageMagick。
调整到精确尺寸
gimp --no-interface --batch '(let* (
(image (car (gimp-file-load RUN-NONINTERACTIVE "/path/input.png" "input.png")))
(drawable (car (gimp-image-get-active-drawable image))))
(gimp-image-scale-full image 1200 630 INTERPOLATION-LINEAR)
(file-png-save RUN-NONINTERACTIVE image (car (gimp-image-get-active-drawable image))
"/path/output.png" "output.png" 0 9 1 1 1 1 1))
(gimp-quit 0)'
先缩放再裁剪(填充模式——覆盖整个画布)
gimp --no-interface --batch '(let* (
(image (car (gimp-file-load RUN-NONINTERACTIVE "/path/input.jpg" "input.jpg")))
(w (car (gimp-image-width image)))
(h (car (gimp-image-height image)))
(target-w 1200) (target-h 630)
(scale (max (/ target-w w) (/ target-h h)))
(new-w (inexact->exact (round (* w scale))))
(new-h (inexact->exact (round (* h scale)))))
(gimp-image-scale-full image new-w new-h INTERPOLATION-LINEAR)
(gimp-image-crop image target-w target-h
(/ (- new-w target-w) 2) (/ (- new-h target-h) 2))
(file-png-save RUN-NONINTERACTIVE image (car (gimp-image-get-active-drawable image))
"/path/output.png" "output.png" 0 9 1 1 1 1 1))
(gimp-quit 0)'
添加半透明颜色覆盖层
gimp --no-interface --batch '(let* (
(image (car (gimp-file-load RUN-NONINTERACTIVE "/path/input.png" "input.png")))
(overlay (car (gimp-layer-new image
(car (gimp-image-width image))
(car (gimp-image-height image))
RGBA-IMAGE "overlay" 60 LAYER-MODE-NORMAL))))
(gimp-image-insert-layer image overlay 0 -1)
(gimp-context-set-foreground (list 0 0 0))
(gimp-edit-fill overlay FILL-FOREGROUND)
(file-png-save RUN-NONINTERACTIVE image (car (gimp-image-flatten image))
"/path/output.png" "output.png" 0 9 1 1 1 1 1))
(gimp-quit 0)'
合成:将图像 B 置于图像 A 上方
gimp --no-interface --batch '(let* (
(base (car (gimp-file-load RUN-NONINTERACTIVE "/path/base.png" "base.png")))
(overlay-img (car (gimp-file-load RUN-NONINTERACTIVE "/path/overlay.png" "overlay.png")))
(overlay-layer (car (gimp-layer-new-from-drawable
(car (gimp-image-get-active-drawable overlay-img)) base))))
(gimp-image-insert-layer base overlay-layer 0 -1)
(gimp-layer-set-offsets overlay-layer 50 50)
(file-png-save RUN-NONINTERACTIVE base (car (gimp-image-flatten base))
"/path/output.png" "output.png" 0 9 1 1 1 1 1))
(gimp-quit 0)'
亮度/对比度/饱和度
gimp --no-interface --batch '(let* (
(image (car (gimp-file-load RUN-NONINTERACTIVE "/path/input.jpg" "input.jpg")))
(drawable (car (gimp-image-get-active-drawable image))))
(gimp-brightness-contrast drawable 20 30)
(gimp-drawable-hue-saturation drawable HUE-RANGE-ALL 0 0 25 0)
(file-jpeg-save RUN-NONINTERACTIVE image drawable
"/path/output.jpg" "output.jpg" 0.92 0 0 0 "" 0 1 0 2 0))
(gimp-quit 0)'
推荐工作流:OG 图像/社交媒体横幅
- 使用 Write 工具编写 SVG 文件(精确布局、文字和颜色)
- 使用 Inkscape 按目标尺寸导出——文字可达到像素级精准
- 发布前使用 OptiPNG 优化
# Step 1: write /tmp/card.svg
# Step 2: export
inkscape /tmp/card.svg \
--export-type=png \
--export-filename=/output/og.png \
--export-width=1200 \
--export-height=630
# Step 3: optimize
optipng -o 5 /output/og.png
提示
- 文字准确度: Inkscape SVG > ImageMagick
-annotate> GIMP Script-Fu(避免用它处理文字) - 速度排序: 简单操作使用 ImageMagick 比 GIMP 快;复杂合成则 GIMP 更胜一筹
- GIMP
--no-interface——脚本始终以(gimp-quit 0)结束 - Script-Fu 路径必须是绝对路径——不能使用
~/快捷写法 - GIMP 不透明度取值范围为 0–100(整数),而非 0.0–1.0
- Inkscape 1.1 使用
--export-type+--export-filename(旧版本使用--export-png) - ImageMagick 几何参数中的
!后缀会强制使用精确尺寸,忽略宽高比(1200x630!)
评论
支持 Markdown