Linux-Shell-图像处理
处理图片,是我们经常需要操作的,而这在Linux中,可以轻松的使用脚本实现批处理。
Ax 准备
我们需要用到convert命令,它来自 Imagemagick软件包,这个软件包包含大量图像处理工具。需要手动安装,访问官方网站。
Bx 使用
a 格式转换
convert file1 file2
b 图片大小
指定宽高
convert file1 -resize wxh file2
指定缩放比
convert file1 -resize "50%" file2
Cx 图像管理脚本
a 编写脚本
#!/bin/bash
if [ $# -ne 4 -a $# -ne 6 -a $# -ne 8 ];
then
echo Incorrect number of arguments
exit 2
fi
while [ $# -ne 0 ];
do
case $1 in
-source) shift; source_dir=$1 ; shift ;;
-scale) shift; scale=$1 ; shift ;;
-percent) shift; percent=$1 ; shift ;;
-dest) shift ; dest_dir=$1 ; shift ;;
-ext) shift ; ext=$1 ; shift ;;
*) echo Wrong parameters ; exit 2 ;;
esac;
done
for img in `echo $source_dir/*` ;
do
source_file=$img
if [[ -n $ext ]];
then
dest_file=${img%.*}.$ext
else
dest_file=$img
fi
if [[ -n $dest_dir ]];
then
dest_file=${dest_file##*/}
dest_file="$dest_dir/$dest_file"
fi
if [[ -n $scale ]];
then
PARAM="-resize $scale"
elif [[ -n $percent ]]; then
PARAM="-resize $percent%"
fi
echo Processing file : $source_file
convert $source_file $PARAM $dest_file
done
b 使用
怎么使用呢,下面给出几个样例
将某文件夹中全部图片调整到1024像素宽度
./imgmanager.sh -source dir -scale 1024x
将全部图片调整到原来的20%
./imgmanager.sh -source dir -percent 20%
调整到原来的50%且转为jpg文件,并存放至名为light的文件夹中
./imgmanager.sh -source dir -percent 50% -ext jpg -dest light
Dx 生成网页相册脚本
先执行脚本,然后把图片放在zmyer文件夹下,再次执行
#!/bin/bash
echo "Creating album"
mkdir -p zmyer
cat << EOF1 > index.html
<html>
<head>
<style>
body
{
width:470px;
margin:auto;
border : 1px dashed grey;
padding : 10px;
}
img
{
margin : 5px;
border: 1px solid black;
}
</style>
</head>
<body>
<center><h1> #Album title</h1></center>
<p>
EOF1
for img in zmyer/*.jpg;
do
convert "$img" -resize "100x" "$img"
echo "<a href=\"$img\"><img src=\"$img\" title=\"$img\"></a>" >> index.html
done
cat << EOF2 >> index.html
</p>
</body>
</html>
EOF2
echo Album generated to index.html
执行效果
我们图片从哪里来呢,网上找?那太麻烦了,一个一个保存,别忘了,我们已经具备基于shell脚本提供的完整自动化体系,每分钟可以爬取互联网上近千张图片,下面就是爬取图片的脚本。
Ex 爬取图片脚本
#!/bin/bash
if [ $# -ne 3 ];
then
echo "使用方法:$0 URL -d 目录"
exit -1
fi
for i in {1..4}
do
case $1 in
-d) shift;directory=$1;shift;;
*) url=${url:-$1};shift;
esac
done
mkdir -p $directory;
baseurl=$(echo $url | egrep -o "https?://[a-zA-Z.]+")
echo Downloading $url
curl -s $url | egrep -o "<img src=[^>]*>" | sed 's/<img src=\"\([^"]*\).*/\1/g' > /tmp/$$.list
sed -i "s|^/|$baseurl/|" /tmp/$$.list
cd $directory;
while read filename;
do
echo Downloading $filename
curl -s -O "$filename"
done < /tmp/$$.list
使用方式
执行效果
我遇到的问题
mkdir: missing operand
查看发现果然不是bash,而是dash
解决方法
sudo dpkg-reconfigure dash
,选择no
现在就是bash了。
如果我们有两个脚本,想对比差异的话,可以使用diff命令
这样就不用一个一个看了。
根据这个理念,我们可以对比网页,比如网页变动,传送门:跟踪网页变动
再结合我们的自动化生成相册的脚本,我们就可以实现全自动了
Fx 参考
[1] 《Linux Shell脚本攻略》第二版 Shantanu Tushar\Sarath Lakshman 著