Linux-是时候使用convert啦!

随着目前智能手机的不断更新,现在拍摄出来的照片质量、画质越来越高、占用的大小也越来越大。但是同时对于服务器的压力也越来越大,而一些老项目在没有做图片上传压缩的情况下,只能默默的允许这种情况愈演愈烈。幸运的是还好有它的存在–convert。

convert 字面意思就有转换的意思,而它的功能也是如此。它是来自于ImageMagick。 ImageMagick是一套功能强大、稳定而且免费的工具集和开发包。

  1. 可以用来读、写和图像格式转换,可以处理超过100种图像格式,包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等格式。
  2. 对图片的操作,即可以通过命令行进行,也可以用C/C++、Perl、Java、PHP、Python或Ruby编程来完成。
  3. ImageMagick几乎可以在任何非专有的操作系统上编译,无论是32位还是64位的CPU,包括*nix ,Windows ‘95/‘98/ME/NT 4.0/2000/XP, Macintosh (MacOS 9 /10), VMS 和 OS/2.
  4. ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布。它遵守GPL许可协议。它可以运行于大多数的操作系统。
  5. 支持语言:Perl, C, C++, Python, PHP, Ruby, Java;现成的ImageMagick接口有以下几种(PerlMagick, Magick++, PythonMagick, imagick for PHP, MagickWand for PHP, RubyMagick, and JMagick)。这可以让程序自动的动态的修改创建图片。

下面一起从安装、使用、脚本、图片转换的过程,几个方面一起看看吧

1.安装

安装方法大概分为2部分,如果是在有网的情况下可以使用各种包管理工具进行安装,如:apt、yum、dnf、rpm等等。
其次是在离线安装的情况下,第一先把文件下载并上传到服务器上:
在这里插入图片描述
origin_url=%2Fuploads%2F20240424%2F72c380fcc2735130a7ec8b217697b584.png%20%22ImageMagick%E5%AE%98%E6%96%B9%E4%B8%8B%E8%BD%BD%E5%9C%B0%E5%9D%80%22&pos_id=img-WxtRZQTy-1713942392186)
可以根据需求选择相应的文件,这次选的是6.9.13 ,上传服务器后解压缩,进入解压缩目录执行./configure即可完成。
温馨提示:最新版本的可能需要的依赖支持比较多,所以尽量在有网的条件下进行。
最后执行convert --version 即可查看是否安装成功。或者使用echo $?查看命令的执行结果

2.使用

使用的场景当然是要符合实际的需求,现在有一个需求举例。有一张图片为48M大小的图片占用空间,需要对图片进行大小转换。
操作:convert -help 可以查看到命令相关的参数配置信息,选择需要的参数-quality 最后加要转换的图片地址和即将要转换的图片地址,具体如下:
convert -quality 50 20240301171520223.jpg 800.jpg
-quality的意思是图片的质量设置为50,或者其他。
在这里插入图片描述
当然,还有很多好玩的命令等待大家挖掘呀!!!


3.脚本

现在我们知道了命令的使用,那如何在脚本里面体现出来呢?

#!/bin/bash
  
  # 设置输入和输出目录
  input_dir=$1
  output_dir=$2
  # 创建输出目录和备份目录
      mkdir -p "$output_dir"
   # 设置压缩质量级别
      quality_level=70
      # 遍历输入目录中的图片文件
      for filename in "$input_dir"/*.{jpg,jpeg,png}; do
          # 检查文件是否存在
          if [ -e "$filename" ]; then
              # 获取文件名(不含路径)
              file=$(basename "$filename")
              # 压缩图片并保存到输出目录
              convert "$filename" -quality $quality_level "$output_dir/$file"
              echo "压缩完成:$file"
          fi
      done
      echo "所有图片已压缩完成!"

这段脚本的意思可以很清晰的看到设置两个变量分别是需要压缩的地址信息,第二个是图片压缩后的地址信息,然后为避免压缩后地址目录文件夹不存在,先创建出来。紧接着设置图片的质量数值,最后,对需要压缩的地址信息进行循环压缩操作,并输出相应的结果信息。以上便完成了图片压缩的全过程。


4.图片转换的过程

图片转换的过程说的是这种需求,即有一个存放附件图片的文件夹,此文件夹中放有大小不一的图片信息,其中有一些图片的压缩占用空间巨大甚至高达68M.现需要对其进行转换。具体操作如下:

1.因为文件中存在各种大小不一的图片信息,所以我们首先要对目录文件夹进行过滤查找,并把过滤后的图片信息另存为。

find /xxx -size +5M -exec cp -a {} /outImage/xxx \;

find查找命令,这条命令的意思是查找出那个目录下的大小超过5M的文件后执行cp命令复制到那个目录文件夹中。
-size 是大小的意思,可以根据大小进行查询 +5M 是大于M 小于5M 是-5 cp是复制的操作。如果只想知道文件名称的话可以 > xxx.txt 。

2.过滤后的图片均为大小过大的图片信息,须对其进行压缩转换。

现在我们已经知道有那些文件需要我们进行转换,通过的脚本命令创建名为Imagecheck.sh 的脚本,并授予执行权限 chmod +x Imagecheck.sh
然后执行./Imagecheck.sh /xxx /outImage/xxx
最后我们得到outImage/xxx中解压后的文件信息。

如果执行./比较麻烦可以存放到echo $Path中显示的目录文件夹,或者whereis vim 根据显示结果将脚本放置当中:mv Imagecheck.sh /usr/lib/bin
这样做的目的是可以在其他目录中执行Imagecheck.sh /xxx /outImage/xxx

3.将压缩后的图片信息覆盖到原目录位置。

现在已经获得很多压缩后的图片信息,如何把图片覆盖替换掉原来目录中的图片信息。答案就是cp,当然如果批量操作肯定是脚本文件。

#!/bin/bash

# 设置输入和输出目录
output_dir=$1
cp_dir=$2
# 备份图片文件
    cp -R -f "$output_dir"/* "$cp_dir"
    echo "所有文件已备份完成!"


outImageCheck.sh /outImage/xxx /xxxx

到此,就完成啦图片压缩的情况!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值