强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

GraphicsMagick 图像处理完整教程 / 第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 NN = 旋转角度 (0-360)
波浪-wave AxBA = 振幅, B = 波长
旋转-rotate NN = 度数
弯曲-distort Arc NN = 弧度

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 0xNN = 标准差
Unsharp 锐化-unsharp-mask 0x1+1+0半径xσ+增益+阈值
浮雕-emboss NN = 强度
边缘检测-edge NN = 半径
中值滤波-median NN = 核大小
油画-paint NN = 半径
素描-sketch 0x20+135半径x角度+强度
木炭画-charcoal NN = 半径
怀旧-sepia-tone N%N = 强度
漩涡-swirl NN = 角度
波浪-wave AxBA=振幅 B=波长
暗角-vignette 0xNN = 强度
像素化先缩小再放大-resize 10% + point
色调分离-posterize NN = 每通道级数
添加噪点+noise TypeGaussian/Uniform/Impulse

7.10 本章小结

要点说明
-blur-unsharp-mask 最常用模糊和锐化是基础操作
-emboss-edge 快速出效果浮雕和边缘检测一行命令
-paint 油画效果很实用参数 N 控制笔触大小
-vignette 暗角增加氛围摄影后期常用
组合使用效果更强大灰度+模糊+混合 = 素描
避免过度处理特效参数宜小不宜大

扩展阅读

  1. GraphicsMagick 效果参考
  2. Unsharp Mask 原理详解
  3. 高斯模糊数学原理
  4. 图像降噪算法综述
  5. 数字图像处理基础

上一章第06章 绘图与合成 下一章第08章 批量处理