惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗
博客园 - 聂微东
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Google DeepMind News
Google DeepMind News
Recent Announcements
Recent Announcements
IT之家
IT之家
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
I
InfoQ
爱范儿
爱范儿
Vercel News
Vercel News
Apple Machine Learning Research
Apple Machine Learning Research
阮一峰的网络日志
阮一峰的网络日志
博客园 - Franky
U
Unit 42
酷 壳 – CoolShell
酷 壳 – CoolShell
腾讯CDC
F
Fortinet All Blogs
V
Visual Studio Blog
人人都是产品经理
人人都是产品经理

流动

山西之旅 | 流动 博客焕新,记录继续 | 流动 友链 | 流动 博客加速实践 广府古城一日游 我做了一个口播短视频二创工具:VideoRemaker Windows 下 Codex Cli 更新报 Move-Item is denied 错误的解决 Caddy 转发 GOST 报 TLS internal error 问题的排查与解决 对口型视频合成方案对比:Wav2Lip、VideoReTalking 与 MuseTalk 2026 音色克隆方案对比:IndexTTS-2、CosyVoice、GPT-SoVITS、Fish Speech、VoxCPM 部署与实测 AI Agent折腾记(OpenClaw / Hermes Agent) 我的2025年 大连之行 回家收麦 六一儿童节爬长城 Golang database/sql 数据库断线自动重连机制解析 Golang默认Http Client导致的cannot assign requested address错误 清明踏春,爬山看海 购入小牛G400T电动车 北京的三月飞雪 wrenAI本地LLM模型部署 天津一日游 2024年终总结 停止使用staticfile.org服务 如何注册一个.sol域名 奥森公园半日游 昌平42公里骑行绿道打卡 十月一日爬慕田峪长城 当Hugo遇上AVIF,优化图片加载 博客被恶意镜像
使用 ImageMagick 自动添加水印,保护图片版权
Liudon · 2024-10-12 · via 流动

背景

细心的朋友可能会发现,我的博客图片都带上了水印。

经过博客被恶意镜像这个事情后,我一直在思考如何防止内容被恶意盗用,尤其是博客里的一些图片。

当Hugo遇上AVIF,优化图片加载这篇文章里,使用了ImageMagick工具做了图片压缩。

当时文章最后说留了个坑,其实就是今天的这篇内容,利用ImageMagick自动给图片添加水印。

实现

思路其实和之前图片压缩一样,还是在Github Action里使用ImageMagick工具进行添加水印操作,不依赖第三方云服务。

workflow代码

- name: Compress Image
run: |
    # 安装依赖
    sudo apt-get update
    sudo apt-get install -y build-essential libx11-dev libxext-dev zlib1g-dev \
        libpng-dev libjpeg-dev libfreetype6-dev libxml2-dev liblcms2-dev \
        libopenexr-dev libtiff-dev libraw-dev libheif-dev libde265-dev \
        libfftw3-dev libglib2.0-dev libwebp-dev

    # 编译ImageMagick
    wget https://download.imagemagick.org/ImageMagick/download/ImageMagick.tar.gz
    tar xvzf ImageMagick.tar.gz
    cd ImageMagick-7.*
    ./configure
    make
    sudo make install
    sudo ldconfig /usr/local/lib

    magick --version

    cd ../

    # 将原图转换大小,同时添加文本水印
    find ./content/posts/ -type f \( -name "*.jpg" -o -name "*.png" -o -name "*.jpeg" \) -exec magick {} -pointsize 48 -fill "#909090" -font ./static/ArchitectsDaughter-Regular.ttf -gravity south -annotate +0+20 "@liudon\nhttps://liudon.com" -resize 1080x\> {} \;

    # 将处理后的原图生成webp格式文件
    find ./content/posts/ -type f \( -name "*.jpg" -o -name "*.png" -o -name "*.jpeg" \) -exec magick {} -quality 75 -define webp:image-hint=photo {}_1080x.webp \;

    # 将处理后的原图生成avif格式文件
    find ./content/posts/ -type f \( -name "*.jpg" -o -name "*.png" -o -name "*.jpeg" \) -exec magick {} {}_1080x.avif \;
  1. 先将原图进行大小转换,同时添加文本水印:

    -fill #909090 代表水印颜色
    -pointsize 48 代表水印文字大小
    -font ./static/ArchitectsDaughter-Regular.ttf 代表水印字体,我使用了ArchitectsDaughter字体,提前下载到了git仓库
    @liudon\nhttps://liudon.com 代表文本水印内容,\n表示换行
    -gravity south 水印位置,九宫格位置
    -annotate +0+20 水印偏移
    

    水印字体文件下载

  2. 将处理后的原图生成webp和avif格式文件

注意,通过sudo apt-get install -y imagemagick libheif-dev安装的ImageMagick版本是6.x,转换过程会有些问题,所以这里改为了通过源码编译最新7.x版本,编译的时间略久一些。

Version: ImageMagick 7.1.1-39 Q16-HDRI x86_64 22428 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI OpenMP(4.5) 
Delegates (built-in): bzlib djvu fontconfig freetype heic jbig jng jp2 jpeg lcms lqr lzma openexr png raw tiff webp x xml zlib zstd
Compiler: gcc (11.4)

好了,这样后续提交Github后,Workflow就会自动利用ImageMagick帮我们处理图片了。