第07章 图像特效
第07章 图像特效
7.1 模糊 (Blur)
7.1.1 高斯模糊 (Gaussian Blur)
# 基本高斯模糊
# -blur 半径x标准差
gm convert -blur 0x5 input.jpg output.jpg # 轻微模糊
gm convert -blur 0x10 input.jpg output.jpg # 中等模糊
gm convert -blur 0x20 input.jpg output.jpg # 强烈模糊
# 指定精确的标准差
gm convert -blur 5x3 input.jpg output.jpg # 半径5, σ=3
7.1.2 模糊参数说明
-blur 半径x标准差
半径: 模糊核大小(0 表示自动计算)
标准差: 模糊程度(越大越模糊)
常用组合:
-blur 0x2 ── 微模糊(降噪级别)
-blur 0x5 ── 轻模糊(柔化皮肤)
-blur 0x10 ── 中模糊(背景虚化)
-blur 0x20 ── 强模糊(景深效果)
-blur 0x50 ── 极模糊(毛玻璃效果)
7.1.3 模糊强度对照表
| 命令 | 标准差 | 效果 | 适用场景 |
|---|
-blur 0x1 | σ=1 | 极轻微 | 像素噪点去除 |
-blur 0x3 | σ=3 | 轻微 | 人像磨皮 |
-blur 0x5 | σ=5 | 明显 | 背景虚化 |
-blur 0x10 | σ=10 | 中等 | 深度虚化 |
-blur 0x20 | σ=20 | 强烈 | 毛玻璃/磨砂 |
-blur 0x50 | σ=50 | 极强 | 完全模糊 |
7.1.4 业务场景:背景虚化
#!/bin/bash
# bg_blur.sh — 背景虚化效果
# 将图片中心区域保持清晰,四周模糊
INPUT="$1"
OUTPUT="blurred_bg_$(basename $INPUT)"
BLUR_LEVEL=15
W=$(gm identify -format "%w" "$INPUT")
H=$(gm identify -format "%h" "$INPUT")
# 计算中心区域
CX=$((W/4))
CY=$((H/4))
CW=$((W/2))
CH=$((H/2))
# 创建模糊版本
gm convert "$INPUT" -blur "0x${BLUR_LEVEL}" /tmp/blurred.jpg
# 创建蒙版(中心白色,四周黑色)
gm convert -size "${W}x${H}" xc:black \
-fill white -draw "roundrectangle ${CX},${CY} $((CX+CW)),$((CY+CH)) 20,20" \
/tmp/mask.png
# 合成
gm composite -compose CopyOpacity /tmp/mask.png "$INPUT" /tmp/sharp_masked.png
gm convert /tmp/blurred.jpg /tmp/sharp_masked.png -composite "$OUTPUT"
rm -f /tmp/blurred.jpg /tmp/mask.png /tmp/sharp_masked.png
echo "背景虚化完成: $OUTPUT"
7.2 锐化 (Sharpen)
7.2.1 基本锐化
# 高斯锐化
# -sharpen 半径x标准差
gm convert -sharpen 0x1 input.jpg output.jpg # 轻微锐化
gm convert -sharpen 0x3 input.jpg output.jpg # 中等锐化
gm convert -sharpen 0x5 input.jpg output.jpg # 强锐化
# Unsharp Mask(反锐化掩模)— 更精细的控制
# -unsharp-mask 半径x标准差+增益+阈值
gm convert -unsharp-mask 0x2+1+0 input.jpg output.jpg
7.2.2 Unsharp Mask 参数详解
-unsharp-mask 半径x标准差+增益+阈值
半径: 锐化影响范围
标准差: 高斯分布参数
增益: 锐化强度 (0.0-5.0)
阈值: 边缘检测阈值 (0-255),避免噪点被锐化
推荐参数:
-unsharp-mask 0x0.5+0.5+0 ── 轻微锐化(Web 用)
-unsharp-mask 0x1+1+0 ── 标准锐化
-unsharp-mask 0x2+1+0.05 ── 中等锐化(阈值保护)
-unsharp-mask 0x3+2+0.05 ── 强锐化(风景照)
-unsharp-mask 0x5+3+0 ── 极强锐化(慎用)
7.2.3 锐化参数对照
| 命令 | 效果 | 适用场景 |
|---|
-sharpen 0x1 | 轻微锐化 | Web 缩略图 |
-sharpen 0x3 | 中等锐化 | 照片后期 |
-unsharp-mask 0x0.5+0.5+0 | 精细微锐化 | 人像 |
-unsharp-mask 0x2+1+0.05 | 标准锐化 | 风景、建筑 |
-unsharp-mask 0x3+2+0.05 | 强锐化 | 细节增强 |
⚠️ 注意:过度锐化会产生明显的光晕 (halo) 和噪点。建议先轻微锐化,再逐步增强。
7.3 浮雕与边缘效果
7.3.1 浮雕效果 (Emboss)
# 基本浮雕
gm convert -emboss 2 input.jpg output.jpg
# 不同强度
gm convert -emboss 0 input.jpg output.jpg # 最轻(仅边缘)
gm convert -emboss 1 input.jpg output.jpg # 轻浮雕
gm convert -emboss 3 input.jpg output.jpg # 强浮雕
gm convert -emboss 5 input.jpg output.jpg # 极强浮雕
# 带浮雕的彩色效果
gm convert -emboss 2 input.jpg /tmp/emboss.jpg
gm composite -compose Overlay /tmp/emboss.jpg input.jpg output_colored.jpg
7.3.2 边缘检测 (Edge)
# 基本边缘检测
gm convert -edge 1 input.jpg output.jpg
# 不同检测强度
gm convert -edge 0 input.jpg output.jpg # 最细边缘
gm convert -edge 2 input.jpg output.jpg # 中等边缘
gm convert -edge 5 input.jpg output.jpg # 粗边缘
# 反色边缘(白底黑线)
gm convert -edge 1 -negate input.jpg output.jpg
7.3.3 线条素描效果
#!/bin/bash
# sketch.sh — 将照片转为素描效果
INPUT="$1"
OUTPUT="sketch_$(basename $INPUT)"
# 步骤 1:转为灰度
gm convert "$INPUT" -colorspace Gray /tmp/gray.jpg
# 步骤 2:取反
gm convert /tmp/gray.jpg -negate /tmp/negate.jpg
# 步骤 3:高斯模糊
gm convert /tmp/negate.jpg -blur 0x15 /tmp/blurred.jpg
# 步骤 4:颜色减淡混合(用 divide)
gm composite -compose Divide /tmp/blurred.jpg /tmp/gray.jpg "$OUTPUT"
rm -f /tmp/gray.jpg /tmp/negate.jpg /tmp/blurred.jpg
echo "素描效果已生成: $OUTPUT"
7.4 降噪 (Noise Reduction)
7.4.1 去噪方法
# 方法 1:Median 滤波(中值滤波,去除椒盐噪声)
gm convert -median 3 input.jpg output.jpg # 3x3 核
gm convert -median 5 input.jpg output.jpg # 5x5 核
# 方法 2:Gaussian 模糊降噪
gm convert -blur 0x1 input.jpg output.jpg # 轻微降噪
# 方法 3:Non-local Means(非局部均值)
# GraphicsMagick 没有原生 NLM,可用组合方式模拟
gm convert -blur 0x1 -sharpen 0x0.5 input.jpg output.jpg
7.4.2 添加噪点
# 添加高斯噪点
gm convert -attenuate 0.5 +noise Gaussian input.jpg output.jpg
# 添加均匀噪点
gm convert -attenuate 0.3 +noise Uniform input.jpg output.jpg
# 添加脉冲噪点(椒盐噪声)
gm convert -attenuate 0.1 +noise Impulse input.jpg output.jpg
# 添加拉普拉斯噪点
gm convert -attenuate 0.3 +noise Laplacian input.jpg output.jpg
# 添加泊松噪点
gm convert -attenuate 0.3 +noise Poisson input.jpg output.jpg
7.4.3 噪点类型对照
| 噪点类型 | 参数 | 典型场景 |
|---|
| Gaussian(高斯) | +noise Gaussian | 数码相机噪点 |
| Uniform(均匀) | +noise Uniform | 量化误差 |
| Impulse(脉冲) | +noise Impulse | 椒盐噪声 |
| Laplacian(拉普拉斯) | +noise Laplacian | 散粒噪声 |
| Poisson(泊松) | +noise Poisson | 光子计数噪声 |
7.4.4 去除噪点
# 去除高斯噪点
gm convert -attenuate 0.5 +noise Gaussian /tmp/noisy.jpg
gm convert /tmp/noisy.jpg -median 3 /tmp/denoised.jpg
# 去除椒盐噪声(中值滤波最有效)
gm convert -attenuate 0.1 +noise Impulse /tmp/salt_pepper.jpg
gm convert /tmp/salt_pepper.jpg -median 3 /tmp/clean.jpg
7.5 艺术效果
7.5.1 油画效果
# 油画效果(使用 -paint 参数)
gm convert -paint 4 input.jpg output.jpg # 轻微油画
gm convert -paint 8 input.jpg output.jpg # 中等油画
gm convert -paint 15 input.jpg output.jpg # 强油画
7.5.2 素描/铅笔画
# 铅笔素描
gm convert -colorspace Gray -sketch 0x20+135 input.jpg output.jpg
# 参数: 半径x角度+强度
# 半径: 笔触大小
# 角度: 线条角度 (0-360)
# 强度: 笔触密度
7.5.3 木炭画效果
# 木炭画
gm convert -charcoal 2 input.jpg output.jpg
# 不同强度
gm convert -charcoal 0 input.jpg output.jpg # 最轻
gm convert -charcoal 5 input.jpg output.jpg # 强效果
7.5.4 怀旧/复古效果
# 褐色调怀旧
gm convert -sepia-tone 80% input.jpg output.jpg
# 不同怀旧程度
gm convert -sepia-tone 50% input.jpg output.jpg # 浅怀旧
gm convert -sepia-tone 100% input.jpg output.jpg # 深怀旧
# 复古胶片效果
gm convert input.jpg \
-modulate 110,70,100 \
-brightness-contrast 5x10 \
-vignette 0x50 \
vintage.jpg
7.5.5 漩涡效果
# 漩涡旋转
gm convert -swirl 45 input.jpg output.jpg # 轻微漩涡
gm convert -swirl 90 input.jpg output.jpg # 中等
gm convert -swirl 180 input.jpg output.jpg # 强漩涡
gm convert -swirl 360 input.jpg output.jpg # 完全漩涡
7.5.6 波浪效果
# 波浪变形
# -wave 振幅x波长
gm convert -wave 10x50 input.jpg output.jpg # 轻微波浪
gm convert -wave 20x30 input.jpg output.jpg # 中等波浪
gm convert -wave 30x20 input.jpg output.jpg # 强波浪
7.5.7 漩涡与波浪参数
| 效果 | 参数 | 说明 |
|---|
| 漩涡 | -swirl N | N = 旋转角度 (0-360) |
| 波浪 | -wave AxB | A = 振幅, B = 波长 |
| 旋转 | -rotate N | N = 度数 |
| 弯曲 | -distort Arc N | N = 弧度 |
7.6 光照与阴影效果
7.6.1 暗角效果 (Vignette)
# 基本暗角
gm convert -vignette 0x30 input.jpg output.jpg
# 不同暗角强度
gm convert -vignette 0x10 input.jpg output.jpg # 轻微
gm convert -vignette 0x50 input.jpg output.jpg # 中等
gm convert -vignette 0x100 input.jpg output.jpg # 强烈
# 带模糊半径的暗角
gm convert -vignette 10x50 input.jpg output.jpg # 10px 模糊半径
7.6.2 曝光效果
# 模拟过曝
gm convert -brightness-contrast 30x20 input.jpg output.jpg
# 模拟欠曝
gm convert -brightness-contrast -30x-20 input.jpg output.jpg
# 局部过曝(中心高光)
gm convert -size 400x400 \
radial-gradient:white-black \
/tmp/mask.png
gm convert -resize "$(gm identify -format '%wx%h' "$INPUT")!" /tmp/mask.png
gm composite -compose Plus /tmp/mask.png input.jpg output_overexposed.jpg
7.6.3 阴影文字效果
# 为图像添加阴影
#!/bin/bash
INPUT="$1"
OUTPUT="shadow_$(basename $INPUT)"
W=$(gm identify -format "%w" "$INPUT")
H=$(gm identify -format "%h" "$INPUT")
NW=$((W+20))
NH=$((H+20))
# 创建阴影
gm convert "$INPUT" -background black -shadow 60x5+5+5 /tmp/shadow.png
# 合成
gm convert -size "${NW}x${NH}" xc:white \
/tmp/shadow.png -geometry +5+5 -composite \
"$INPUT" -geometry +0+0 -composite \
"$OUTPUT"
rm -f /tmp/shadow.png
7.7 其他常用效果
7.7.1 像素化
# 马赛克/像素化效果
gm convert input.jpg -resize 10% -resize 1000% output.jpg
# 可控像素化
gm convert input.jpg \
-resize "$(expr $(gm identify -format '%w' input.jpg) / 10)%" \
-filter point -resize 1000% \
output_pixelated.jpg
7.7.2 色调分离效果
# 海报化效果
gm convert -posterize 4 input.jpg output.jpg # 4 级(64 色)
gm convert -posterize 8 input.jpg output.jpg # 8 级(512 色)
7.7.3 边框效果
# 简单边框
gm convert -border 5 -bordercolor black input.jpg output.jpg
# 圆角边框
gm convert input.jpg \
-bordercolor white -border 10 \
\( +clone -alpha extract \
-draw 'roundrectangle 0,0 %[fx:w-1],%[fx:h-1] 15,15' \
-alpha off \) \
-compose CopyOpacity -composite \
output_rounded.png
7.8 效果组合实战
场景:Instagram 风格滤镜
#!/bin/bash
# instagram_filter.sh
# 模拟 Instagram 风格滤镜
INPUT="$1"
FILTER="$2"
OUTPUT="filtered_$(basename $INPUT)"
case "$FILTER" in
"clarendon")
# 增强对比度和饱和度
gm convert "$INPUT" \
-brightness-contrast 0x20 \
-modulate 105,130,100 \
"$OUTPUT"
;;
"gingham")
# 柔和淡雅
gm convert "$INPUT" \
-modulate 110,80,100 \
-brightness-contrast 10x-10 \
-fill 'rgba(255,255,240,0.1)' \
-draw "rectangle 0,0 9999,9999" \
"$OUTPUT"
;;
"moon")
# 黑白高对比
gm convert "$INPUT" \
-colorspace Gray \
-brightness-contrast 10x30 \
"$OUTPUT"
;;
"lark")
# 明亮清新
gm convert "$INPUT" \
-brightness-contrast 15x10 \
-modulate 115,110,100 \
"$OUTPUT"
;;
"reyes")
# 复古淡色
gm convert "$INPUT" \
-modulate 120,60,100 \
-sepia-tone 30% \
-brightness-contrast 10x-5 \
"$OUTPUT"
;;
esac
echo "滤镜 $FILTER 已应用: $OUTPUT"
7.9 特效操作速查表
| 效果 | 命令 | 参数说明 |
|---|
| 高斯模糊 | -blur 0xN | N = 标准差 |
| Unsharp 锐化 | -unsharp-mask 0x1+1+0 | 半径xσ+增益+阈值 |
| 浮雕 | -emboss N | N = 强度 |
| 边缘检测 | -edge N | N = 半径 |
| 中值滤波 | -median N | N = 核大小 |
| 油画 | -paint N | N = 半径 |
| 素描 | -sketch 0x20+135 | 半径x角度+强度 |
| 木炭画 | -charcoal N | N = 半径 |
| 怀旧 | -sepia-tone N% | N = 强度 |
| 漩涡 | -swirl N | N = 角度 |
| 波浪 | -wave AxB | A=振幅 B=波长 |
| 暗角 | -vignette 0xN | N = 强度 |
| 像素化 | 先缩小再放大 | -resize 10% + point |
| 色调分离 | -posterize N | N = 每通道级数 |
| 添加噪点 | +noise Type | Gaussian/Uniform/Impulse |
7.10 本章小结
| 要点 | 说明 |
|---|
-blur 和 -unsharp-mask 最常用 | 模糊和锐化是基础操作 |
-emboss 和 -edge 快速出效果 | 浮雕和边缘检测一行命令 |
-paint 油画效果很实用 | 参数 N 控制笔触大小 |
-vignette 暗角增加氛围 | 摄影后期常用 |
| 组合使用效果更强大 | 灰度+模糊+混合 = 素描 |
| 避免过度处理 | 特效参数宜小不宜大 |
扩展阅读
- GraphicsMagick 效果参考
- Unsharp Mask 原理详解
- 高斯模糊数学原理
- 图像降噪算法综述
- 数字图像处理基础
上一章:第06章 绘图与合成
下一章:第08章 批量处理