Linux 用 ImageMagick 批量压缩图片形成缩略图

原文: http://www.lao8.org/article_1698/imagemagick_linux.html

我的ImageMagick使用心得 http://www.charry.org/docs/linux/ImageMagick/ImageMagick.html

使用ImageMagick如何对图片进行全面压缩 http://www.programgo.com/article/88632572307/

ImageMagick之图片裁剪 http://www.netingcn.com/imagemagick-crop.html

linux中批量缩放图片的命令

首先得安装ImageMagick,linux中批量缩小图片的这个工具超级强大

linux centos安装命令

sudo dnf -y install ImageMagick

-resize 跟 -sample的区别

放大,缩小 -resize, -sample 与resize的区别在于-sample只进行了采样,没有进行插值,所以用来生成缩略图最合适

批量缩放图片到指定尺寸的命令

for img in `ls *.jpg` ; do convert -resize 25%x25% $img thumb-$img ; done
#这个命令是批量缩小25%

只指定宽度等比缩放的命令

for img in `ls *.jpg` ; do convert -resize 200 $img thumb-$img ; done

只指定高度等比缩放

for img in `ls *.jpg` ; do convert -resize x200 $img thumb-$img ; done

为当前目录的所有图像生成缩略图

for img in `ls*.jpg` do convert -resize 25%x25% $img thumb-$img done

批量缩小根目录文件夹中的图片, 如果宽度大于900px就缩小,否则不动

for img in `ls */*.jpg` ; do convert -resize "900 >" $img thumb-$img ; done

注: -resize 是缩小,-sample 是压缩 注意:为保险起见,压缩图片前可以先拷贝备份一下,安然再压缩就可以了: 例如

cp -rf upload/* upload2/

创建新文件夹来存放处理后文件

rm -rf tmp; mkdir tmp; for img in `ls *.jpg` ; do  convert -resize 1000 $img ./tmp/$img ; done

rm -rf /home/pandy/图片/tmp; mkdir /home/pandy/图片/tmp; for img in `cd /home/pandy/图片; ls *.jpg` ; do  convert -resize 500 $img /home/pandy/图片/tmp/$img ; done

图片优化

rm -rf quality; mkdir quality; for img in `ls *.jpg` ; do  convert -quality 50% $img ./quality/$img ; done
rm -rf quality; mkdir quality; for img in `ls *.jpg` ; do  convert -quality 60% $img ./quality/$img ; done
rm -rf quality; mkdir quality; for img in `ls *.jpg` ; do  convert -quality 70% $img ./quality/$img ; done
rm -rf quality; mkdir quality; for img in `ls *.jpg` ; do  convert -quality 80% $img ./quality/$img ; done
rm -rf quality; mkdir quality; for img in `ls *.jpg` ; do  convert -quality 90% $img ./quality/$img ; done

图片放缩,去掉多余信息和优化

rm -rf tmp; mkdir tmp; for img in `ls *.jpg` ; do  convert -resize 640 -strip -quality 70% $img ./tmp/$img ; done

裁剪

convert src.jpg;-crop 100x100+0+0 1.jpg 1_1.jpg
#convert 原始图片 -crop widthxheight+x+y 目标图片
 
convert src.jpg -crop 100x100 dest.jpg
#假设src.jpg的大小是300x200,执行命令后将得到名为dest-0.jpg、dest-1.jpg...dest-5.jpg的6张大小为100x100的小图片。注意如果尺寸不是目标图片的整数倍,那么右边缘和下边缘的一部分图片就用实际尺寸
 
convert src.jpg -crop 100x80+50+30 dest.jpg
#在原始图片的上距离上部30像素左部50为起点的位置,分别向左向下截取一块大小为100x80的图片。如果x相对于坐标,宽度不够100,那就取实际值。
 
convert src.jpg -gravity center -crop 100x80+0+0 dest.jpg
#在原始图上截取中心部分一块100x80的图片
 
convert src.jpg -gravity southeast -crop 100x80+10+5 dest.jpg
#在原始图上截取右下角距离下边缘10个像素,右边缘5个像素一块100x80的图片

上下左右翻转

#上下翻转
rm -rf tmp; mkdir tmp; for img in `ls *.jpg` ; do  convert -flip $img ./tmp/$img ; done
#左右翻转
rm -rf tmp; mkdir tmp; for img in `ls *.jpg` ; do  convert -flop $img ./tmp/$img ; done