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

GraphicsMagick 图像处理完整教程 / 第09章 图像格式详解

第09章 图像格式详解

9.1 格式总览

GraphicsMagick 支持 88+ 种图像格式。以下是最常用的格式对比:

格式全称透明动图有损压缩无损压缩典型用途
JPEGJoint Photographic Experts Group照片、Web 主图
PNGPortable Network Graphics图标、截图、透明图
WebPWeb PictureWeb 现代格式
GIFGraphics Interchange Format✅ (256色)动图、图标
TIFFTagged Image File Format印刷、存档
BMPBitmapWindows 原始格式
HEIFHigh Efficiency Image Format移动设备
AV1 Image (AVIF)AV1 Image File Format下一代 Web
JPEG 2000医学影像
PDFPortable Document Format文档
SVGScalable Vector Graphics矢量图形
RAW相机原始格式专业摄影

9.2 JPEG

9.2.1 JPEG 特点

特性说明
色彩支持24 位真彩色 (16M 色)
压缩方式有损压缩 (DCT)
透明度❌ 不支持
动画❌ 不支持
最佳用途照片、渐变色图像
不适合截图、图标、文字、线条画

9.2.2 JPEG 操作

# 基本转换
gm convert input.png output.jpg

# 设置质量
gm convert -quality 95 input.png high_quality.jpg   # 高质量
gm convert -quality 60 input.png low_quality.jpg    # 低质量(小文件)

# 渐进式 JPEG(Progressive JPEG)
gm convert -interlace Plane input.png progressive.jpg

# 去除 EXIF 元数据
gm convert -strip input.jpg output_stripped.jpg

# 限制文件大小(近似)
gm convert -define jpeg:extent=100KB input.jpg output_100k.jpg

# 色度子采样
gm convert -sampling-factor 4:4:4 input.jpg output_444.jpg  # 无子采样
gm convert -sampling-factor 4:2:0 input.jpg output_420.jpg  # 默认

9.2.3 JPEG 质量与文件大小

质量视觉效果压缩比典型文件 (4000×3000)
100几乎无损1:2~18MB
95极高1:4~9MB
85高(推荐 Web)1:8~4.5MB
75中高1:12~3MB
60中等1:20~1.8MB
40较低1:40~900KB
20低(明显失真)1:80~450KB

9.2.4 渐进式 JPEG 详解

# 渐进式 JPEG  vs 基线 JPEG
# 渐进式:从模糊到清晰逐步加载(网络友好)
# 基线:从上到下逐行加载

# 生成渐进式 JPEG
gm convert -interlace Plane input.jpg progressive.jpg

# 验证是否为渐进式
gm identify -verbose progressive.jpg | grep "Interlace"
# 输出: Interlace: Plane (渐进式)
# 输出: Interlace: None (基线)

9.3 PNG

9.3.1 PNG 特点

特性说明
色彩支持最高 48 位真彩色 + 16 位透明度
压缩方式无损压缩 (DEFLATE)
透明度✅ 支持(Alpha 通道)
动画❌ (PNG 格式本身不支持)
最佳用途图标、截图、文字、透明图、需要无损的场景
不适合照片(文件太大)

9.3.2 PNG 操作

# 基本转换
gm convert input.jpg output.png

# 控制压缩级别 (0-9)
gm convert -quality 0 input.png uncompressed.png  # 无压缩
gm convert -quality 9 input.png compressed.png    # 最高压缩

# 去除 Alpha 通道
gm convert -opaque-color white transparent.png opaque.jpg

# 保留透明度
gm convert -transparent-color white input.jpg transparent.png

# PNG 优化
gm convert input.png -strip -quality 9 optimized.png

# 8 位调色板 PNG(小文件)
gm convert -colors 256 -type Palette input.png palette.png

9.3.3 PNG 压缩级别对比

级别压缩速度文件大小适用场景
0最快最大调试
1-3较大实时处理
6中等中等默认
9最慢最小存档、发布

9.3.4 透明度处理

# 将白色背景转为透明
gm convert -fuzz 5% -transparent white input.jpg output.png

# 将特定颜色转为透明
gm convert -fuzz 10% -transparent '#FF00FF' input.jpg output.png

# 创建半透明图像
gm convert input.png -channel A -evaluate Set 50% output_semi.png

# 提取 Alpha 通道
gm convert input.png -channel A -separate alpha_mask.png

9.4 WebP

9.4.1 WebP 特点

特性说明
色彩支持32 位 (RGB + Alpha)
压缩方式有损 (VP8) / 无损
透明度✅ 支持
动画✅ 支持
压缩率比 JPEG 小 25-34%
浏览器支持Chrome、Firefox、Edge、Safari (14+)
最佳用途Web 图片、移动应用

9.4.2 WebP 操作

# JPEG → WebP
gm convert -quality 85 input.jpg output.webp

# PNG → WebP(保留透明度)
gm convert -quality 90 input.png output.webp

# WebP → JPEG
gm convert input.webp output.jpg

# 有损 WebP
gm convert -quality 75 input.jpg lossy.webp

# 无损 WebP
gm convert -define webp:lossless=true input.png lossless.webp

9.4.3 WebP 与 JPEG/PNG 对比

对比维度JPEGPNGWebP (有损)WebP (无损)
照片文件大小100% (基准)300%65-75%200%
透明度
动画
浏览器支持100%100%96%96%
编码速度较慢

9.5 TIFF

9.5.1 TIFF 特点

特性说明
色彩支持最高 48 位
压缩方式多种(LZW、ZIP、JPEG、PackBits、无压缩)
透明度✅ 支持
多页✅ 支持
元数据丰富的 TIFF 标签
最佳用途印刷、存档、医学影像、扫描

9.5.2 TIFF 操作

# 基本转换
gm convert input.jpg output.tiff

# 使用 LZW 无损压缩
gm convert -compress LZW input.jpg output_lzw.tiff

# 使用 ZIP 无损压缩
gm convert -compress Zip input.jpg output_zip.tiff

# 使用 PackBits 压缩
gm convert -compress PackBits input.jpg output_pack.tiff

# 无压缩
gm convert -compress None input.jpg output_none.tiff

# 设置 DPI(印刷用)
gm convert -density 300 -units PixelsPerInch \
  input.jpg output_300dpi.tiff

# 多页 TIFF
gm convert page1.jpg page2.jpg page3.jpg multipage.tiff

9.5.3 TIFF 压缩方式对比

压缩方式类型压缩比速度适用场景
None1:1最快原始存档
LZW无损1:2~1:4通用无损
ZIP无损1:2~1:5大面积纯色
PackBits无损1:1~1:3最快简单图案
JPEG有损1:10~1:20不敏感场景
Group4无损黑白文档

9.6 HEIF / HEIC

9.6.1 HEIF 特点

特性说明
开发者MPEG (Moving Picture Experts Group)
压缩基础HEVC / H.265
压缩率比 JPEG 小 ~50%
透明度
动画
主要来源iPhone、iPad 拍照
浏览器支持Safari (macOS/iOS)

9.6.2 HEIF 操作

# 需要编译支持 libheif
# 安装: sudo apt install libheif-dev

# HEIC → JPEG
gm convert IMG_1234.heic output.jpg

# HEIC → PNG(保留质量)
gm convert IMG_1234.heic output.png

# 批量转换 iPhone 照片
for heic in *.HEIC; do
  gm convert -quality 92 "$heic" "${heic%.HEIC}.jpg"
done

9.7 RAW 格式

9.7.1 RAW 特点

特性说明
本质相机传感器原始数据
色深12-14 位/通道
优势最大后期空间
常见格式CR2 (Canon)、NEF (Nikon)、ARW (Sony)、DNG (通用)
处理库LibRaw / dcraw

9.7.2 RAW 操作

# 需要 libraw 支持
# 安装: sudo apt install libraw-dev

# RAW → JPEG
gm convert -quality 95 DSC_0001.NEF output.jpg

# RAW → TIFF(保留最大质量)
gm convert -depth 16 DSC_0001.CR2 output.tiff

# 指定白平衡
gm convert -define dng:use-camera-wb=true DSC_0001.DNG output.jpg

# 批量转换
for raw in *.NEF *.CR2 *.ARW; do
  [ -f "$raw" ] || continue
  gm convert -quality 92 "$raw" "${raw%.*}.jpg"
done

9.8 EXIF 元数据处理

9.8.1 查看 EXIF 信息

# 查看完整 EXIF
gm identify -verbose photo.jpg | grep -A 50 "EXIF"

# 提取特定 EXIF 字段
gm identify -format "%[EXIF:DateTime]" photo.jpg
gm identify -format "%[EXIF:Make]" photo.jpg
gm identify -format "%[EXIF:Model]" photo.jpg
gm identify -format "%[EXIF:GPSLatitude]" photo.jpg
gm identify -format "%[EXIF:ImageWidth]x%[EXIF:ImageHeight]" photo.jpg

9.8.2 EXIF 常用字段

字段说明示例
DateTime拍摄日期2024:01:15 10:30:00
Make相机品牌Canon
Model相机型号EOS R5
ExposureTime曝光时间1/250
FNumber光圈f/2.8
ISOSpeedRatingsISO400
FocalLength焦距85mm
ImageWidth宽度8192
ImageHeight高度5464
Orientation方向1 (正常)
GPSLatitude纬度39.9042° N
GPSLongitude经度116.4074° E
Software处理软件Adobe Lightroom
Artist作者John Doe
Copyright版权© 2024

9.8.3 EXIF 操作

# 去除所有元数据
gm convert -strip input.jpg output_no_exif.jpg

# 保留元数据复制
gm convert input.jpg output_with_exif.jpg

# 去除 GPS 信息(隐私保护)
gm convert +profile "exif:GPS*" input.jpg output_no_gps.jpg

# 去除所有配置文件
gm convert +profile '*' input.jpg output_clean.jpg

9.8.4 业务场景:照片信息批量提取

#!/bin/bash
# exif_report.sh — 批量提取照片 EXIF 信息

echo "文件名,拍摄日期,相机,光圈,ISO,焦距" > exif_report.csv

for img in *.jpg *.JPG *.jpeg; do
  [ -f "$img" ] || continue

  DATE=$(gm identify -format "%[EXIF:DateTime]" "$img" 2>/dev/null)
  MAKE=$(gm identify -format "%[EXIF:Make]" "$img" 2>/dev/null)
  MODEL=$(gm identify -format "%[EXIF:Model]" "$img" 2>/dev/null)
  FNUM=$(gm identify -format "%[EXIF:FNumber]" "$img" 2>/dev/null)
  ISO=$(gm identify -format "%[EXIF:ISOSpeedRatings]" "$img" 2>/dev/null)
  FOCAL=$(gm identify -format "%[EXIF:FocalLength]" "$img" 2>/dev/null)

  echo "$img,$DATE,$MAKE $MODEL,$FNUM,$ISO,$FOCAL" >> exif_report.csv
done

echo "报告已生成: exif_report.csv"

9.9 格式选择指南

9.9.1 按用途选择

用途推荐格式理由
Web 照片WebP > JPEG压缩率高
Web 图标/LogoWebP > PNG支持透明,文件小
截图PNG无损,文字清晰
动图WebP > GIF色彩丰富
印刷TIFF (300dpi)无损,高精度
存档TIFF / PNG无损
iPhone 照片HEIC → JPEG/WebP兼容性
专业摄影RAW → TIFF最大后期空间
电子邮件附件JPEG (q=70)小文件
文档扫描PDF / TIFF G4压缩率高

9.9.2 Web 图片格式决策树

需要透明?
├── 是 → WebP (首选) > PNG-8 (简单) / PNG-24 (复杂)
└── 否 → 照片?
    ├── 是 → WebP (首选) > JPEG (兼容性)
    └── 否 → 线条/文字?
        ├── 是 → PNG-8/16 > WebP (无损)
        └── 否 → WebP > JPEG

9.9.3 自动格式选择脚本

#!/bin/bash
# auto_format.sh — 根据图像特征自动选择最佳格式

INPUT="$1"
BASENAME=$(basename "${INPUT%.*}")

# 检测特征
INFO=$(gm identify -verbose "$INPUT" 2>/dev/null)
HAS_ALPHA=$(echo "$INFO" | grep -c "Alpha")
COLORS=$(echo "$INFO" | grep "Number Unique" | awk '{print $NF}')

# 决策逻辑
if [ "$HAS_ALPHA" -gt 0 ]; then
  if [ "$COLORS" -lt 256 ]; then
    FORMAT="png"
    QUALITY=9
    echo "→ 少色透明图 → PNG-8"
  else
    FORMAT="webp"
    QUALITY=90
    echo "→ 多色透明图 → WebP"
  fi
elif [ "$COLORS" -lt 256 ]; then
  FORMAT="png"
  QUALITY=9
  echo "→ 少色不透明 → PNG-8"
else
  FORMAT="webp"
  QUALITY=85
  echo "→ 照片级 → WebP"
fi

gm convert "$INPUT" -quality "$QUALITY" "${BASENAME}.${FORMAT}"
echo "输出: ${BASENAME}.${FORMAT} ($(stat -c%s "${BASENAME}.${FORMAT}" 2>/dev/null || stat -f%z "${BASENAME}.${FORMAT}") bytes)"

9.10 格式操作速查表

操作命令
查看格式支持gm convert -list format
JPEG 渐进式-interlace Plane
JPEG 质量-quality 85
PNG 压缩-quality 0-9
WebP 转换gm convert a.jpg a.webp
TIFF LZW-compress LZW
去元数据-strip
去 GPS+profile "exif:GPS*"
查看 EXIFgm identify -verbose
EXIF 字段-format "%[EXIF:Field]"
多页 TIFFgm convert a.jpg b.jpg multi.tiff
透明去背景-fuzz N% -transparent COLOR

9.11 本章小结

要点说明
JPEG 适合照片有损压缩,质量 85 是 Web 最佳平衡
PNG 适合图标/截图无损,支持透明,文件较大
WebP 是现代 Web 首选兼具有损/无损、透明、动画
TIFF 适合印刷/存档无损,支持多页,DPI 可控
HEIC 需要额外库iPhone 照片常见格式
EXIF 包含拍摄信息-strip 去除隐私数据

扩展阅读

  1. GraphicsMagick 格式支持
  2. WebP 格式官方文档
  3. HEIF 格式规范
  4. EXIF 标准详解
  5. JPEG 压缩算法

上一章第08章 批量处理 下一章第10章 编程接口 (API)