<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>批量处理 on 二翁集</title>
    <link>https://erweng.com/tags/%E6%89%B9%E9%87%8F%E5%A4%84%E7%90%86/</link>
    <description>Recent content in 批量处理 on 二翁集</description>
    <generator>Hugo -- 0.146.4</generator>
    <language>zh-cn</language>
    <lastBuildDate>Tue, 23 Jun 2026 11:00:00 +0800</lastBuildDate>
    <atom:link href="https://erweng.com/tags/%E6%89%B9%E9%87%8F%E5%A4%84%E7%90%86/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>pngquant / jpegoptim：开发者与批量处理利器，命令行图片压缩实战</title>
      <link>https://erweng.com/posts/command-line-image-compression-tools/</link>
      <pubDate>Tue, 23 Jun 2026 11:00:00 +0800</pubDate>
      <guid>https://erweng.com/posts/command-line-image-compression-tools/</guid>
      <description>&lt;p&gt;日常图片压缩，很多人第一反应是找 GUI 软件：点几下鼠标，拖入图片，调整参数，等待完成。这类工具适合手动处理少量文件，但如果你需要批量压缩几百张图片、集成到构建流程里，或者在服务器上自动优化上传资源，GUI 就显得力不从心了。&lt;/p&gt;
&lt;p&gt;命令行图片压缩工具正是为解决这类场景而生：它们没有图形界面，但速度极快、可脚本化、能批量处理，而且是许多 GUI 压缩软件背后的核心引擎。本文介绍两款经典工具：&lt;strong&gt;pngquant&lt;/strong&gt; 和 &lt;strong&gt;jpegoptim&lt;/strong&gt;，分别专注 PNG 和 JPEG 格式。&lt;/p&gt;
&lt;div class=&#34;divider&#34;&gt;· · ·&lt;/div&gt;

&lt;h2 id=&#34;1-pngquant--png-有损压缩专家&#34;&gt;1. pngquant — PNG 有损压缩专家&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; pngquant 是一款专注于 PNG 格式的命令行压缩工具，采用有损压缩算法，通常能将 PNG 体积减小 40-70%，同时保持较好的视觉质量。它基于 libimagequant 库，通过减少调色板颜色数量实现高压缩率，是许多 GUI 图片压缩软件背后的 PNG 压缩引擎。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;官网：&lt;/strong&gt; &lt;a href=&#34;https://pngquant.org/&#34;&gt;https://pngquant.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub：&lt;/strong&gt; &lt;a href=&#34;https://github.com/kornelski/pngquant&#34;&gt;https://github.com/kornelski/pngquant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;收费：&lt;/strong&gt; 完全免费（开源，BSD-like license）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;国内可用：&lt;/strong&gt; ✅ 命令行工具，国内可直接运行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;开箱即用：&lt;/strong&gt; ✅ 安装后直接通过命令行使用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;手机端：&lt;/strong&gt; ❌ 仅桌面/服务器命令行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;优点：&lt;/strong&gt; 压缩率极高（40-70%）、速度极快、支持批量处理、可集成到脚本/CI/CD、保持透明通道（alpha channel）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;缺点：&lt;/strong&gt; 有损压缩，不适合对画质零容忍的场景；仅支持 PNG 格式&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;divider&#34;&gt;· · ·&lt;/div&gt;

&lt;h2 id=&#34;2-jpegoptim--jpeg-全能优化器&#34;&gt;2. jpegoptim — JPEG 全能优化器&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; jpegoptim 是一款专注于 JPEG 格式的命令行优化工具，同时支持无损和有损两种优化模式。无损模式下不降低画质，仅去除冗余元数据；有损模式下可调整质量因子，进一步减小文件体积。它可处理 EXIF、ICC 配置文件、注释等元数据，是服务器和开发者批量优化 JPEG 图片的首选工具。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;官网：&lt;/strong&gt; &lt;a href=&#34;https://www.jpegoptim.org/&#34;&gt;https://www.jpegoptim.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub：&lt;/strong&gt; &lt;a href=&#34;https://github.com/tjko/jpegoptim&#34;&gt;https://github.com/tjko/jpegoptim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;收费：&lt;/strong&gt; 完全免费（GPL-3.0）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;国内可用：&lt;/strong&gt; ✅ 命令行工具，国内可直接运行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;开箱即用：&lt;/strong&gt; ✅ 安装后直接通过命令行使用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;手机端：&lt;/strong&gt; ❌ 仅桌面/服务器命令行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;优点：&lt;/strong&gt; 同时支持无损和有损优化、保留 EXIF 可选、支持批量处理、可集成到自动化流程、压缩后画质损失极小&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;缺点：&lt;/strong&gt; 仅支持 JPEG 格式；高级功能需要编译时开启额外选项&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;divider&#34;&gt;· · ·&lt;/div&gt;

&lt;h2 id=&#34;核心使用场景对比&#34;&gt;核心使用场景对比&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;场景&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;pngquant&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;jpegoptim&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;PNG 有损压缩&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;✅ 主力场景&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;❌ 不支持 PNG&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;PNG 批量处理&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;✅ 支持 glob 和脚本&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;❌ 不支持 PNG&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;JPEG 无损优化&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;❌ 不支持 JPEG&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;✅ 主力场景&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;JPEG 有损压缩&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;❌ 不支持 JPEG&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;✅ 支持质量调整&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;保留透明通道&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;✅ 支持&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;N/A&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;保留 EXIF&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;默认移除&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;✅ 可选保留&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;CI/CD 集成&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;✅ 易于集成&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;✅ 易于集成&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;服务器自动优化&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;✅ 适合&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;✅ 适合&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&#34;divider&#34;&gt;· · ·&lt;/div&gt;

&lt;h2 id=&#34;典型命令行用法&#34;&gt;典型命令行用法&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;pngquant：&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
