大王非常不高兴 發表於 2025-10-12 21:50:00

Python 基于python实现的图片压缩助手

<h2 id="程序及源码下载地址">程序及源码下载地址:</h2>
<p>https://gitee.com/ishouke/image-optimizer</p>
<h2 id="图片压缩助手使用说明">图片压缩助手使用说明</h2>
<h3 id="适用环境">适用环境</h3>
<p>win11</p>
<p>imageOptimizer.zip</p>
<p>备注:win7可能存在兼容性问题,其它版本未验证</p>
<p>Centos7</p>
<p>imageOptimizer.tar</p>
<h3 id="用途">用途</h3>
<p>批量压缩图片,开发时间有限,目前仅支持图片格式:<code>.jpg</code>, <code>.jpeg</code>, <code>.png</code></p>
<h3 id="使用方法">使用方法</h3>
<h4 id="助手工具配置">助手工具配置</h4>
<p><em>image_optimizer.conf</em></p>
<pre><code class="language-properties">
# ###### 通用配置 ######
# 压缩后的图片的存储路径 默认为当前目录下的 compressedImages目录
# 注意:如果指定了输出目录,会在该目录下,按文件所在路径,创建对应层级的目录结构,比如 output_dir设置为D:\testdir
# 检索到的文件在E:\somedir\subdir\target\file.png,那么压缩后的file.png位于 D:\testdir\somedir\subdir\target目录下

# 注意:指定的输出目录不能是输入目录的子路径,否则会造成死循环(虽然代码已做判断),因为会在子目录下新建目录,导致遍历输入目录时,会无限遍历
output_dir =

# 合法文件扩展名,如果有多个,英文逗号分隔
# 目前仅支持 .jpg, .jpeg, .png
valid_extensions = .jpg, .jpeg, .png

# 最大线程数(默认: 本机cpu核数)
workers =

# 是否遍历输入目录的子目录
# 1 -- 是0 -- 否 默认为 0
traverse_sub_dir = 1

# 是否支持正则识别待排除路径
# 1 -- 是0 -- 否 默认为0
check_path_by_regex = 1

# 输入文件名称是和源文件名保持一致
# 1 -- 是0 -- 否 默认为 0默认输出文件格式:源文件名(不带后缀)-compressed
# 注意:仅 override_src_image 不等于 1 该配置才有效
keep_name_unchanged = 0

# 是否覆盖源图片
# 1 -- 覆盖 0 -- 不覆盖,默认为 0
# 注意:该配置项为1时,指定输出目录路径不起作用,即 output_dir 配置项不起作用
override_src_image = 0

# 覆盖前是否备份源图片
# 1 -- 备份 0 -- 不备份,默认为 0 在文件所在目录下创建bak目录,然后拷贝源文件到该目录下
# 仅 override_src_image = 1 该配置才有效
backup_src_image = 1

# 备份目录名称
backup_dir_name = bak

# 过滤器--按大小过滤--文件大小大于等于该配置项的文件才压缩
# 单位KB,要求整数,默认为0
filter_file_size = 512

###### 工具差异化配置 ######
# png压缩工具
# 可选值: pngquant默认 pngquant(有损压缩)
png_comp_tool = pngquant

# pngquant压缩命令模板
# 参数说明:
# -f | --force强制覆盖已有的输出文件
# --skip-if-larger 仅在转换后的文件小于原始文件时保存
# --output {output_image_path} 指定输出图片路径
# --quality min-max 不保存低于最小值,高于最大值(0-100)时使用更少的颜色
# --speed N 表示速度与质量的权衡。1代表慢速,4代表默认速度,11代表快速且粗糙
# --nofs            禁用Floyd-Steinberg抖动算法
# --posterize N 输出低精度颜色(例如,用于ARGB4444输出)
# --strip 移除可选元数据(在Mac上默认为开启)
# 注意:{}为英文输入
pngquant_compress_cmd_template = {bin_tool} --force --skip-if-larger --speed 4 --output "{output_image_path}" "{input_image_path}"

# jpg, jpeg 压缩工具
# 目前仅支持 cv2
jpg_comp_tool = cv2

# jpg,jpeg cv2压缩配置
# 说明:
# -- 控制整体质量:数值越低,压缩率越高(文件越小),但画质损失越明显。 要求整数(0-100),默认值 95。适用所有 JPEG 压缩场景(核心参数)。
cv2_jpeg_quality = 42

# 是否优化霍夫曼编码表(0=关闭,1=开启)
# 开启后可进一步减小文件体积(约 5-10%),但编码时间略增加。要求整数(0/1),默认值 1。适用需要更小文件体积时(推荐开启)
cv2_jpeg_optimize = 1

# 是否生成渐进式 JPEG(0=基线 JPEG,1=渐进式)。渐进式 JPEG 加载时先显示模糊轮廓,再逐步清晰,适合网页。 要求整数(0/1),默认值 0。适用网页/移动端图片(需浏览器支持渐进式解码)。
cv2_jpeg_progressive =

# 单独控制亮度(Luma)通道的质量。亮度对视觉影响更大,可优先降低此值以压缩。要求整数(0-100),无默认值。适用灰度图或颜色简单的图像(如监控截图)。
# 注意:配置该参数,该参数值越大,图片体积越大
cv2_jpeg_luma_quality =

#单独控制色度(Chroma)通道的质量。色度对视觉敏感度较低,可大幅降低此值。要求整数(0-100),无默认值。适用颜色变化少的图像(如风景照、卡通图)。
cv2_jpeg_chroma_quality =
</code></pre>
<h4 id="输入图片路径配置">输入图片路径配置</h4>
<p>待压缩图片所在目录路径</p>
<p><code>conf/image_path_included.conf</code></p>
<pre><code class="language-json"># 需要检索的路径,每行代表一个路径
# # 代表注释,空行或者注释会自动过滤
# 示例:D:\test、/opt/data/images
</code></pre>
<h4 id="待排除图片路径配置">待排除图片路径配置</h4>
<p>不需要压缩的图片所在目录路径、不需要压缩的图片文件路径</p>
<p><code>conf/image_path_excluded.conf</code></p>
<pre><code class="language-shell"># 需要排除的路径,每行代表一个路径
# # 代表注释,空行或者注释会自动过滤
# 注意,配置支持目录、文件路径
# 示例:bak$ -- 以bak结尾的路径都排除
</code></pre>
<h4 id="日志配置">日志配置</h4>
<p>一般不用改</p>
<p><em>conf/log.conf</em></p>
<pre><code class="language-properties">
log_file =
max_bytes_each = 512000
backup_count = 10
fmt = |(asctime)s |(filename)s |(levelname)s: |(message)s
logger_name = test_logger
log_level_in_console = 10
log_level_in_logfile = 20
console_log_on = 1
logfile_log_on = 1


log_level = '日志级别:CRITICAL = 50 ERROR = 40 WARNING = 30 INFO = 20 DEBUG = 10 NOTSET = 0'
log_on = 'console_log_on= 1 开启控制台日志,0则关闭,logfile_log_on = 1 开启文件日志, 0则关闭'
log_file = 'log.txt所在的目录必须已存在'
</code></pre>
<h4 id="运行">运行</h4>
<p>windows</p>
<pre><code class="language-shell">cd imageOptimizer
imageOptimizer.exe
</code></pre>
<p>linux</p>
<pre><code class="language-sh"># chmod +x bin_tools/pngquant
# ./imageOptimizer
</code></pre>
<h4 id="命令行参数">命令行参数</h4>
<p>工具支持部分命令行参数,例如以下:</p>
<pre><code>./imageOptimizer --input_dir=/root/testdir --output_dir=/root/mydir
</code></pre>
<p>参数介绍:</p>
<ul>
<li><code>--input_dir=image_dir_paths</code>--待压缩图片所在目录路径,如果有多个采用英文逗号分隔(默认: <code>inputImages</code>)</li>
<li><code>--output_dir=image_dir_paths</code>   --压缩后图片存储目录路径(默认: <code>compressedImages</code>)</li>
<li><code>--workers=Num</code>--最大线程数(默认: 本机cpu核数)</li>
<li><code>--png_comp_tool=tool</code> -- png图片压缩工具, 默认<code>pngquant</code></li>
<li><code>--jpg_comp_tool=tool</code> -- jpg/jpeg图片压缩工具, 默认<code>cv2</code></li>
<li><code>--traverse_sub_dir</code>-- 是否遍历输入目录的子目录, 添加该参数,则表示遍历子目录</li>
<li><code>--check_path_by_regex</code> -- 是否支持正则识别待排除路径。添加该参数则表示支持正则识别。</li>
<li><code>--override_src_image</code> -- 是否覆盖源图片,添加该参数则表示覆盖。</li>
<li><code>--backup_src_image</code>-- 覆盖前是否备份源图片, 添加该参数则表示备份。</li>
</ul>
<p><strong>注意:如果配置了命令行参数则以命令行参数为准,否则读取助手工具配置文件中对应参数配置</strong></p>


</div>
<div id="MySignature" role="contentinfo">
    <div id="AllanboltSignature">
    <p id="PSignature" style="border: #330066 1px dashed; padding: 5px 10px; font-family: 微软雅黑; font-size: 11px">
      <span style="margin-left: 5px; font-weight: bold">作者:授客</span>
                <br>
      <span style="margin-left: 5px; font-weight: bold">微信/QQ:1033553122
                <br>
      <span style="margin-left: 5px; font-weight: bold">全国软件测试QQ交流群:7156436</span></span>
                <br>
      <span style="margin-left: 5px; font-weight: bold">Git地址:https://gitee.com/ishouke</span>
                <br>
      <span style="margin-left: 5px; font-weight: bold">友情提示:<span>限于时间仓促,文中可能存在错误,欢迎指正、评论!</span>
      <br>
                <span><span style="margin-left: 5px; font-weight: bold; color: red">作者五行缺钱,如果觉得文章对您有帮助,请扫描下边的二维码打赏作者,金额随意</span>,您的支持将是我继续创作的源动力,<span style="margin-left: 10px; font-weight: bold; color: red">打赏后如有任何疑问,请联系我!!!</span></span>
      <br>
                <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;微信打赏&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                支付宝打赏&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;全国软件测试交流QQ群&nbsp;&nbsp;<br>
                <img src="https://www.cnblogs.com/images/cnblogs_com/shouke/1368383/t_%E5%BE%AE%E4%BF%A1%E6%94%B6%E6%AC%BE%E7%A0%81.bmp">
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="https://www.cnblogs.com/images/cnblogs_com/shouke/1368383/t_%E6%94%AF%E4%BB%98%E5%AE%9D%E6%94%B6%E6%AC%BE%E7%A0%81.bmp">
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="https://www.cnblogs.com/images/cnblogs_com/shouke/1368383/t_qq%E7%BE%A4.bmp">
    </span></span></p>
</div><br><br>
来源:https://www.cnblogs.com/shouke/p/19134100
頁: [1]
查看完整版本: Python 基于python实现的图片压缩助手