Linux批量转换图片文件(png/jpg)

ImageMagick 转换图片

参考:

在 Linux 下将 PNG 和 JPG 批量互转的四种方法

https://blog.csdn.net/m0_37874102/article/details/115480073

Linux系统下批量压缩图片

https://blog.csdn.net/ao123056/article/details/123479736

顺便记录两个无损压缩图片命令工具:

jpegoptim - 是一种用于优化/压缩JPEG文件而不会降低质量的实用程序。

optipng –是一个小型程序,可以将PNG图像优化为较小的尺寸而不会丢失任何信息。

一、convert命令

Version: ImageMagick 6.9.11-60 Q16 x86_64 2021-01-25 https://imagemagick.org
Copyright: (C) 1999-2021 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP(4.5)
Delegates (built-in): bzlib djvu fftw fontconfig freetype heic jbig jng jp2 jpeg lcms lqr ltdl lzma openexr pangocairo png tiff webp wmf x xml zlib
Usage: convert-im6.q16 [options ...] file [ [options ...] file ...] [options ...] file

convert 命令是 /usr/bin/convert-im6.q16 软连接 

 二、mogrify 命令 

convert-im6.q16 [options ...] file [ [options ...] file ...] [options ...] file

Version: ImageMagick 6.9.11-60 Q16 x86_64 2021-01-25 https://imagemagick.org
Copyright: (C) 1999-2021 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP(4.5)
Delegates (built-in): bzlib djvu fftw fontconfig freetype heic jbig jng jp2 jpeg lcms lqr ltdl lzma openexr pangocairo png tiff webp wmf x xml zlib
Usage: mogrify-im6.q16 [options ...] file [ [options ...] file ...]

 mogrify命令是 /usr/bin/mogrify-im6.q16 软连接 

三、shell命令转换

1、 使用 ls和 xargs命令来转换 PNG 和 JPG 

  • 从 PNG 转换到 JPG 
$ ls -1 *.png | xargs -n 1 bash -c 'convert "$0" "${0%.png}.jpg"'
  • 从 JPG 转换到 PNG
$ ls -1 *.jpg | xargs -n 1 bash -c 'convert "$0" "${0%.jpg}.png"'

 -c – 指示 bash 运行给定的命令

2、使用for循环命令来转换 PNG 和 JPG

  • 从 PNG 转换到 JPG
$ bash -c 'for image in *.png; do convert "$image" "${image%.png}.jpg"; echo "image $image converted to ${image%.png}.jpg"; done'
  • 从 JPG 转换到 PNG
$ bash -c 'for image in *.jpg; do convert "$image" "${image%.jpg}.png"; echo "image $image converted to ${image%.jpg}.png"; done'

-c 允许执行包括在单引号中的循环语句。

3、shell脚本文件

#!/bin/bash
#convert
for image in *.png; do
convert "$image" "${image%.png}.jpg"
echo “image $image converted to ${image%.png}.jpg ”
done
exit 0

chmod执行

$ chmod +x convert.sh
$ ./convert.sh

四、压缩图片

# 查询大于2M的图片文件
# 查询总数量 :215535个文件
find -type f -size +2M -regex ".*\.\(jpg\|JPG\|jpeg\|JPEG\|png\|PNG\)" | wc -l
​
# 文件大小统计,这个统计
find -type f -size +2M -regex ".*\.\(jpg\|JPG\|jpeg\|JPEG\|png\|PNG\)" | xargs du -ach
​
# 上面文件大小统计的命令不太准确,后面因统计不太准确,所以找到了以下的命令,可以直接计算出文件的大小、文件的数量
# 查询大于2M 的所有图片数量与文件大小    
# 总数量:339586个
# 总大小:1068.79G
# 平均大小:3.2M
find . -size +2048 -regex ".*\.\(jpg\|JPG\|jpeg\|JPEG\|png\|PNG\)" -exec ls -l {} \; |awk 'BEGIN{count=0;size=0;} \
     {count = count + 1; size = size + $5/1024/1024;} \
     END{print "Total count " count; \
       print "Total Size " size/1024 " GB" ; \
       print "Avg Size " size / count "MB"; \
       print ""}'

 对2M以上文件进行压缩,压缩品质为60,-p为保留原文件修改时间,-t为压缩完成后统计输出压缩率

find . -size +2048 -regex ".*\.\(jpg\|JPG\|jpeg\|JPEG\)" | xargs jpegoptim -m60 -p -t

# 新建 new_dir 文件夹,文件压缩后输出到 new_dir

find . -size +2048 -regex ".*\.\(jpg\|JPG\|jpeg\|JPEG\)" | xargs jpegoptim -m60 -p -t -d new_dir

optipng 图片色彩度高压缩很慢,并且文件大小变化很低

find -name '*.png' | xargs optipng

用 convert

# ImageMagick
sudo install ImageMagick
# png格式的图片压缩使用optimpng  压缩效率太低了 ,使用ImageMagick测试可行,但是效率一般,150M大小10个文件左右需要35秒左右,不过可以压缩大文件,且不区分文件类型都可以压缩, 如100M以上的jpg、png都可以文件
 find ./ -regex '.*\(png\|PNG\)' -size +2M -exec convert  -quality 60 {} {} \;

Finish.

 

posted @ 2024-02-02 13:36  fieldtianye  阅读(160)  评论(0编辑  收藏  举报