ImageMagick常用指令详解

来源:互联网 发布:java jsonrpc 框架 编辑:程序博客网 时间:2024/05/20 09:10

convert 转换图像格式和大小,模糊,裁剪,驱除污点,抖动,临近,图片上画图片,加入新图片,生成缩略图等。

identify 描述一个或较多图像文件的格式和特性。

composite 根据一个图片或多个图片组合生成图片

 

举个例子

convert +profile '*' [src]{file}.{ext} -quality 80 -resize '280x140^>' -gravity Center -crop 280x140+0+0 +repage [out]{file}_280x140.{ext}

把一张图片按80的质量去压缩(jpg的压缩参数),同时按图片比例非强制缩放成不超过280x140的图片.居中裁剪280x140,去掉图片裁减后的空白和图片exif信息,通常这种指令是为了保证图片大小正好为280x140

 

下面对各个指令的含义简要说明

 

-quality   图片质量,jpg默认99,png默认75

 

-resize

100x100      高度和宽度比例保留最高值,高比不变

100x100^     高度和宽度比例保留最低值,宽高比不变

100x100!      宽度和高度强制转换,忽视宽高比

100x100>     更改长宽,当图片长或宽超过规定的尺寸

100x100<     更改长宽 只有当图片长宽都超过规定的尺寸

100x100^>   更改长宽,当图片长或宽超过规定的尺寸。高度和宽度比例保留最低值

100x100^<   更改长宽,只有当图片长宽都超过规定的尺寸。高度和宽度比例保留最低值

100             按指定的宽度缩放,保持宽高比例

 x100          按指定高度缩放,保持宽高比

 

-gravity NorthWest, North, NorthEast, West, Center, East,  SouthWest, South, SouthEast截取用的定位指令,定位截取区域在图片中的方位

 

-crop 200x200+0+0 截取用的截取指令 ,在用定位指令后,按后两位的偏移值偏移截取范围左上角的像素后,再按前两位的数值,从左上角开始截取相应大小的图片

 

+repage 去掉图片裁减后的空白


-dissolve 30 设定组合图片透明度dissolve示例


+/-profile * 去掉/添加图片exif信息

下面记录下一些比较复杂一点的指令:

convert +profile '*' [src]{file}.{ext} -quality 90 -resize '700>' /data/tony/watermark_1.png -gravity southeast -compose Dissolve -composite [out]{file}_1024x1024.{ext}

convert +profile '*' [src]{file}.{ext} /data/watermark_1.png -gravity southeast -geometry +10+10 -composite [src]{file}.{ext}

convert +profile '*' [src]{file}.{ext} -coalesce -resize '950x135>' [out]{file}_950x135.{ext}

convert +profile '*' [src]{file}.{ext} -resize '650x500>' miff:- | composite +profile '*' -dissolve 30 -gravity southeast /data/tony/watermark_1.png - [out]{file}_650x500.{ext}

convert [src]{file}.{ext} -quality 80 -resize '190>' -background white -gravity center -extent 190x +repage [out]{file}_width190.{ext}

【/bin/sh^M: bad interpreter: 没有那个文件或目录】
vim filename 
然后用命令 
:set ff? #可以看到dos或unix的字样. 如果的确是dos格式的。 
然后用 
:set ff=unix #把它强制为unix格式的, 然后存盘退出。


###############################################
shell 除法计算
shell计算中使用除法,基本默认上都是整除。
比如:
num1=2
num2=3
num3=`expr $num1 / $num2`
这个时候num3=0 ,是因为是因为expr不支持浮点除法
解决的方法:
num3=`echo "scale=2; $num1/$num2" | bc`
使用bc工具,sclae控制小数点后保留几位
还有一种方法
awk 'BEGIN{printf "%.2f\n",’$num1‘/’$num2‘}'
如果用百分比表示
awk 'BEGIN{printf "%.2f%\n",(’$num1‘/’$num2‘)*100}'

##############################################
convert +profile '*' -size 950x135 xc:#ffffff [src]{file}.{ext} -resize 950x135 -gravity center -compose Src-over -composite [out]{file}_950x135.{ext}
解读:该指令会把gif的动态图拆分成好几张图,


-coalesce
完全定义一个GIF动画序列的每一帧的外观,形成“电影胶片”动画

根据它的-处置元数据覆盖各图像中的图像序列,以再现一个动画中的动画序列中的每个点的外观。有的图片应该是相同的大小,并且为动画继续如预期般GIF动画的工作分配适当的GIF处理设置。这样的帧更容易查看和比高度优化的GIF图像叠加处理。

该动画可以重新优化使用层法“优化”处理后,虽然没有保证恢复的GIF动画优化是比原来更好。

##################################################
gif拿到的只是最后一帧的数据,所以gif的图片在width和height值上有出入
convert +profile '*' tly2.gif -resize "600>" tly2_600.gif
C:\>identify tly2.gif
tly2.gif[0] GIF 341x186 341x186+0+0 8-bit sRGB 256c 191KB 0.000u 0:00.003
tly2.gif[1] GIF 194x173 341x186+128+13 8-bit sRGB 256c 191KB 0.000u 0:00.010
tly2.gif[2] GIF 192x175 341x186+130+11 8-bit sRGB 256c 191KB 0.000u 0:00.013
tly2.gif[3] GIF 80x177 341x186+131+9 8-bit sRGB 256c 191KB 0.000u 0:00.016
...
tly2.gif[30] GIF 164x175 341x186+122+11 8-bit sRGB 256c 191KB 0.000u 0:00.094
tly2.gif[31] GIF 145x172 341x186+122+14 8-bit sRGB 256c 191KB 0.000u 0:00.097
tly2.gif[32] GIF 195x167 341x186+122+19 8-bit sRGB 256c 191KB 0.000u 0:00.100
tly2.gif[33] GIF 196x174 341x186+121+12 8-bit sRGB 256c 191KB 0.000u 0:00.105

 

一、crop_center.sh

如果原图宽>高:按宽*size/高缩放; 如果原图宽<高:按高*size/宽缩放; 并居中裁剪size*size

 

复制代码
#!/bin/bashexport PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbinfilename=$1filename2=$2size=$3resize="70"wh=($(/usr/local/bin/identify -format "%w %h " $1))if [ ${wh[0]} -gt ${wh[1]} ]thenresize=$(echo "${wh[0]}*$size/${wh[1]}+1" | bc)elseresize=$(echo "${wh[1]}*$size/${wh[0]}+1" | bc)fi/usr/local/bin/convert +profile "*" -quality 75 -resize ${resize}x${resize} $filename $filename2/usr/local/bin/convert +profile "*" -gravity Center -crop ${size}x${size}+0+0 $filename2 $filename2
复制代码

使用范例:/usr/local/bin/crop_center.sh [src]{file}.{ext} [out]{file}_small.{ext} 100

 

二、tony-convert-1.sh

原图按1024x1024>等比缩放,并打水印于右下角;如果宽高都小于300,则直接使用原图

 

复制代码
#!/bin/sh# we have 2 arguments: source file name and dest file nameif [ $# -ne 2 ] ; then   echo "Usage: tony-convert-1.sh [source path] [dest path]"  echo "Example: ./tony-convert-1.sh src/1234.jpg out/1234_100x200.jpg"  exit 1 fisrcFile="$1"dstFile="$2"index1=`expr index "${srcFile}" /`index2=`expr index "${srcFile}" .`file=`expr substr "${srcFile}" \`expr ${index1} + 1\` \`expr ${index2} - ${index1} - 1\``ext=`expr substr "${srcFile}" \`expr ${index2} + 1\` \`expr length "${srcFile}" - ${index2}\``#identify image numpicCount=`/usr/local/sbin/bin/bin/identify ${srcFile}|grep -c "${file}.${ext}"`echo animate pictures: ${picCount}if [ ${picCount} -gt 1 ] ; then  echo "No handle for animate pictures"  cp ${srcFile} ${dstFile}   exit 0 fi#identify image sizesizeMatrix=`/usr/local/sbin/bin/bin/identify -format "%wx%h %f\n" ${srcFile}`index1=`expr index "${sizeMatrix}" x`width=`expr substr "${sizeMatrix}" 1 \`expr ${index1} - 1\``echo width: ${width}index2=`expr \`expr index "${sizeMatrix}" ' '\` - ${index1} - 1`height=`expr substr "${sizeMatrix}" \`expr ${index1} + 1\` ${index2}`echo height: ${height}if [ ${width} -lt 300 ] ; then  if [ ${height} -lt 300 ] ; then    echo Image size less than 300x300    cp ${srcFile} ${dstFile}    exit 0  fifiif [ `echo ${ext}|tr 'a-z' 'A-Z'` = "BMP" ] ; then  index1=`expr index "${dstFile}" .`  dstFile=`expr substr "${dstFile}" 1 \`expr ${index1} - 1\``.jpg fi#convert image/usr/local/sbin/bin/bin/convert +profile '*' ${srcFile} -resize '1024x1024>' /data/tony/watermark_1.png -gravity southeast -compose Dissolve -composite  ${dstFile}
复制代码

使用范例:/usr/local/sbin/bin/bin/tony-convert-1.sh [src]{file}.{ext} [out]{file}_1024x1024.{ext}

 

三、resizeByWidthOrHeight.sh:

宽大于高时:定宽等比缩放 高自适应;宽小于高时:定高等比缩放,宽自适应

 

复制代码
#!/bin/sh# we have 2 arguments: source file name and dest file nameif [ $# -ne 3 ] ; then   echo "Usage: resizeByWidthOrHeight.sh [source path] [widthxheigth] [dest path]"  echo "Example: ./resizeByWidthOrHeight.sh src/1234.jpg 150x150 out/1234_150x2150.jpg"  exit 1 fisrcFile="$1"dstFile="$3"destSize="$2"destWidth=${destSize%x*}destHeight=${destSize#*x}echo "destSize: ${destWidth}x${destHeight}"index1=`expr index "${srcFile}" /`echo "index1: $index1"index2=`expr index "${srcFile}" .`echo "index2: $index2"file=`expr substr "${srcFile}" \`expr ${index1} + 1\` \`expr ${index2} - ${index1} - 1\``echo "file: $file"ext=`expr substr "${srcFile}" \`expr ${index2} + 1\` \`expr length "${srcFile}" - ${index2}\``echo "ext: $ext"#identify image numpicCount=`/usr/local/sbin/bin/bin/identify ${srcFile}|grep -c "${file}.${ext}"`echo animate pictures: ${picCount}if [ ${picCount} -gt 1 ] ; then  echo "No handle for animate pictures"  cp ${srcFile} ${dstFile}   exit 0 fi#identify image sizesizeMatrix=`/usr/local/sbin/bin/bin/identify -format "%wx%h" ${srcFile}`echo "index1: $index1"width=${sizeMatrix%x*}echo width: ${width}height=${sizeMatrix#*x}echo height: ${height}newSize="${destWidth}x${destHeight}"# width < heightif [ ${width} -lt ${height} ] ; then  newSize="'x${destHeight}>'"else  newSize="'${destWidth}>'"fiecho "newSize: ${newSize}"# resizeresizeCmd="/usr/local/sbin/bin/bin/convert ${srcFile} -quality 100 -resize ${newSize} ${dstFile}"echo "resizeCmd: ${resizeCmd}"eval "${resizeCmd}"
复制代码

使用范例:/usr/local/sbin/bin/bin/resizeByWidthOrHeight.sh [src]{file}.{ext} 594x395 [out]{file}_594x395.{ext}

 

四、tony-convert-2.sh:

缩放规则:

目标图宽<高时:定高等比压缩,宽自适应;

原图宽高比>目标图宽高比时:定高等比压缩,宽自适应;

否则:定宽等比压缩,高自适应

裁剪规则:默认居中,若目标图宽>=高,则居左上角

 

复制代码
#!/bin/sh# we have 2 arguments: source file name and dest file nameif [ $# -ne 3 ] ; then   echo "Usage: tony-convert-2.sh [source path] [widthxheigth] [dest path]"  echo "Example: ./tony-convert-2.sh src/1234.jpg 150x150 out/1234_150x150.jpg"  exit 1 fisrcFile="$1"dstFile="$3"destSize="$2"destWidth=${destSize%x*}destHeight=${destSize#*x}echo "destSize: ${destWidth}x${destHeight}"index1=`expr index "${srcFile}" /`echo "index1: $index1"index2=`expr index "${srcFile}" .`echo "index2: $index2"file=`expr substr "${srcFile}" \`expr ${index1} + 1\` \`expr ${index2} - ${index1} - 1\``echo "file: $file"ext=`expr substr "${srcFile}" \`expr ${index2} + 1\` \`expr length "${srcFile}" - ${index2}\``echo "ext: $ext"#identify image numpicCount=`/usr/local/sbin/bin/bin/identify ${srcFile}|grep -c "${file}.${ext}"`echo animate pictures: ${picCount}if [ ${picCount} -gt 1 ] ; then  echo "No handle for animate pictures"  cp ${srcFile} ${dstFile}   exit 0 fi#identify image sizesizeMatrix=`/usr/local/sbin/bin/bin/identify -format "%wx%h" ${srcFile}`echo "index1: $index1"width=${sizeMatrix%x*}echo width: ${width}height=${sizeMatrix#*x}echo height: ${height}if [ `echo ${ext}|tr 'a-z' 'A-Z'` = "BMP" ] ; then  index1=`expr index "${dstFile}" .`  dstFile=`expr substr "${dstFile}" 1 \`expr ${index1} - 1\``.jpg fisrcRate=$(echo "scale=9; $width*1.0 / $height*1.0" | bc)destRate=$(echo "scale=9; $destWidth*1.0 / $destHeight*1.0" | bc)echo "srcRate: ${srcRate}"echo "destRate: ${destRate}"resizeCmd="/usr/local/sbin/bin/bin/convert +profile '*' ${srcFile} -resize '${destWidth}x${destHeight}^>' -grAvity Center -crop ${destWidth}x${destHeight}+0+0 +repage ${dstFile}"newSize="${destWidth}x${destHeight}"# width < heightif [ ${destWidth} -lt ${destHeight} ] ; then  newSize="x${destHeight}>"elif [ `echo "${srcRate} > ${destRate}" | bc` -eq 1 ] ; then  newSize="x${destHeight}>"else  newSize="${destWidth}>"figrAvityWay="Center"# width < heightif [ ${destWidth} -ge ${destHeight} ] ; then  grAvityWay="NorthWest"fi# resizeresizeCmd="/usr/local/sbin/bin/bin/convert +profile '*' ${srcFile} -resize '${newSize}' -grAvity ${grAvityWay} -crop ${destWidth}x${destHeight}+0+0 +repage ${dstFile}"echo "resizeCmd: ${resizeCmd}"eval "${resizeCmd}"
复制代码

使用范例:/usr/local/sbin/bin/bin/tony-convert-2.sh [src]{file}.{ext} 170x105 [out]{file}_170x105.{ext}

 

五、tony-convert-3.sh: 
以destWidth表示目的图宽,destHeight表示目的图高,persentSize=destWidth/destHeight表示目的图宽高比;
当原图宽<destWidth且高<destHeight时,不截取,直接上传; 
当原图宽<destWidth,高>destHeight时,以原图宽为宽居中裁剪 竖图; 
当原图宽>destWidth,高<destHeight时,以原图高为高居中裁剪 横图; 
当原图宽>destWidth,高>destHeight, 
{

当原图宽/高>persentSize时,将原图高压缩为destHeight居中裁剪 
当原图宽/高<persentSize时,将原图宽压缩为destWidth居中裁剪

}

 

复制代码
!/bin/sh# we have 2 arguments: source file name and dest file nameif [ $# -ne 3 ] ; then   echo "Usage: tony-convert-3.sh [source path] [widthxheigth] [dest path]"  echo "Example: ./tony-convert-3.sh src/1234.jpg 750x375 out/1234_750x375.jpg"  exit 1 fisrcFile="$1"dstFile="$3"destSize="$2"destWidth=${destSize%x*}destHeight=${destSize#*x}echo "destSize: ${destWidth}x${destHeight}"index1=`expr index "${srcFile}" /`echo "index1: $index1"index2=`expr index "${srcFile}" .`echo "index2: $index2"file=`expr substr "${srcFile}" \`expr ${index1} + 1\` \`expr ${index2} - ${index1} - 1\``echo "file: $file"ext=`expr substr "${srcFile}" \`expr ${index2} + 1\` \`expr length "${srcFile}" - ${index2}\``echo "ext: $ext"#identify image numpicCount=`/usr/local/sbin/bin/bin/identify ${srcFile}|grep -c "${file}.${ext}"`echo animate pictures: ${picCount}if [ ${picCount} -gt 1 ] ; then  echo "No handle for animate pictures"  cp ${srcFile} ${dstFile}   exit 0 fi#identify image sizesizeMatrix=`/usr/local/sbin/bin/bin/identify -format "%wx%h" ${srcFile}`echo "index1: $index1"width=${sizeMatrix%x*}echo width: ${width}height=${sizeMatrix#*x}echo height: ${height}#if [ `echo ${ext}|tr 'a-z' 'A-Z'` = "BMP" ] ; then  #index1=`expr index "${dstFile}" .`  #dstFile=`expr substr "${dstFile}" 1 \`expr ${index1} - 1\``.jpg #fi#newSize="${destWidth}x${destHeight}"heightPadding="0"widthPadding="0"persentSize=`echo "scale=4; ${destWidth}/${destHeight}" | bc`echo "persentSize: ${persentSize}"# qualityqualityCmd="/usr/local/sbin/bin/bin/convert ${srcFile} -quality 90 ${dstFile}"echo "qualityCmd: ${qualityCmd}"eval "${qualityCmd}"# width > 750 && height <375  hengTuif [ ${width} -gt ${destWidth} ] && [ ${height} -lt ${destHeight} ] ; then  heightPadding=$[ ${destHeight}/2-${height}/2]  echo heightPadding: ${heightPadding}  flag=0# width < 750 && height >375  shuTuelif [ ${width} -lt ${destWidth} ] && [ ${height} -gt ${destHeight} ] ; then  widthPadding=$[ ${destWidth}/2-${width}/2 ]  echo widthPadding: ${widthPadding}  flag=0# width > 750 && height >375  resize and cropelif [ ${width} -gt ${destWidth} ] && [ ${height} -gt ${destHeight} ] && [ $ [ ${width}/${height} ]>${persentSize} ]  ; then  echo "resize by src's height then crop"  newSize="'x${destHeight}>'"  flag=1elif [ ${width} -gt ${destWidth} ] && [ ${height} -gt ${destHeight} ] && [ $[ ${width}/${height} ]<${persentSize} ]  ; then  echo "resize by src's width then crop"  newSize="'${destWidth}>'"  flag=1fi  echo "newSize: ${newSize}"# resizeif [ ${flag} -eq 1 ] ; then  resizeCmd="/usr/local/sbin/bin/bin/convert ${dstFile} -resize ${newSize} ${dstFile}"  echo "resizeCmd: ${resizeCmd}"  eval "${resizeCmd}"  cropCmd="/usr/local/sbin/bin/bin/convert ${dstFile} -gravity Center  -crop ${destSize}+0+0 +repage ${dstFile}"else  echo "only crop pic"  cropCmd="/usr/local/sbin/bin/bin/convert ${dstFile} -gravity Center  -crop ${destSize}+${widthPadding}+${heightPadding} +repage ${dstFile}"fi# cropecho "cropCmd: ${cropCmd}"eval "${cropCmd}"
复制代码

使用范例:/usr/local/sbin/bin/bin/tony-convert-3.sh [src]{file}.{ext} 750x375 [out]{file}_750x375.{ext}

 

六、tony-convert-3_bg.sh: 
以destWidth表示目的图宽,destHeight表示目的图高,
当原图宽<destWidth且高<destHeight时,不截取,直接上传;
当原图宽<destWidth,高>destHeight时,以原图宽为宽居中裁剪 树图;
当原图宽>destWidth,高<destHeight时,以原图高为高居中裁剪 横图;
当原图宽>destWidth,高>destHeight,
{
当原图宽>高时,将原图高压缩为destHeight居中裁剪
当原图宽<高时,将原图宽压缩为destWidth居中裁剪
}
所有情况都要居中补白

 

复制代码
!/bin/sh# we have 2 arguments: source file name and dest file nameif [ $# -ne 3 ] ; then   echo "Usage: tony-convert-3_bg.sh [source path] [widthxheigth] [dest path]"  echo "Example: ./tony-convert-3_bg.sh src/1234.jpg 750x375 out/1234_750x375.jpg"  exit 1 fisrcFile="$1"dstFile="$3"destSize="$2"destWidth=${destSize%x*}destHeight=${destSize#*x}echo "destSize: ${destWidth}x${destHeight}"index1=`expr index "${srcFile}" /`echo "index1: $index1"index2=`expr index "${srcFile}" .`echo "index2: $index2"file=`expr substr "${srcFile}" \`expr ${index1} + 1\` \`expr ${index2} - ${index1} - 1\``echo "file: $file"ext=`expr substr "${srcFile}" \`expr ${index2} + 1\` \`expr length "${srcFile}" - ${index2}\``echo "ext: $ext"#identify image numpicCount=`/usr/local/sbin/bin/bin/identify ${srcFile}|grep -c "${file}.${ext}"`echo animate pictures: ${picCount}if [ ${picCount} -gt 1 ] ; then  echo "No handle for animate pictures"  cp ${srcFile} ${dstFile}   exit 0 fi#identify image sizesizeMatrix=`/usr/local/sbin/bin/bin/identify -format "%wx%h" ${srcFile}`echo "index1: $index1"width=${sizeMatrix%x*}echo width: ${width}height=${sizeMatrix#*x}echo height: ${height}# qualityqualityCmd="/usr/local/sbin/bin/bin/convert ${srcFile} -quality 90 ${dstFile}"echo "qualityCmd: ${qualityCmd}"eval "${qualityCmd}"# width > 750 && height <375  hengTuflag=0if [ ${width} -gt ${destWidth} ] && [ ${height} -lt ${destHeight} ] ; then  heightPadding=$[ ${destHeight}/2-${height}/2]  echo heightPadding: ${heightPadding}  flag=0# width < 750 && height >375  shuTuelif [ ${width} -lt ${destWidth} ] && [ ${height} -gt ${destHeight} ] ; then  widthPadding=$[ ${destWidth}/2-${width}/2 ]  echo widthPadding: ${widthPadding}  flag=0# width > 750 && height >375  resize and cropelif [ ${width} -gt ${destWidth} ] && [ ${height} -gt ${destHeight} ] && [ ${width} -gt ${height} ]  ; then  echo "resize by src's height then crop"  newSize="'x${destHeight}>'"  flag=1elif [ ${width} -gt ${destWidth} ] && [ ${height} -gt ${destHeight} ] && [ ${width} -lt ${height} ]  ; then  echo "resize by src's width then crop"  newSize="'${destWidth}>'"  flag=1fi  echo "newSize: ${newSize}"# resizeif [ ${flag} -eq 1 ] ; then  resizeCmd="/usr/local/sbin/bin/bin/convert ${dstFile} -resize ${newSize} ${dstFile}"  echo "resizeCmd: ${resizeCmd}"  eval "${resizeCmd}"  cropCmd="/usr/local/sbin/bin/bin/convert ${dstFile} -gravity Center -crop ${destSize}+0+0 +repage -background white -compose Copy -gravity center -extent ${destSize} ${dstFile}"else  echo "only crop pic"  cropCmd="/usr/local/sbin/bin/bin/convert ${dstFile} -gravity Center -crop ${destSize}+0+0 +repage -background white -compose Copy -gravity center -extent ${destSize} ${dstFile}"fi# cropecho "cropCmd: ${cropCmd}"eval "${cropCmd}"
复制代码

使用范例:【240x240大小,背景补白,1PX灰色边框】 /usr/local/sbin/bin/bin/tony-convert-3_bg.sh [src]{file}.{ext} 240x240 [out]{file}_240x240.{ext}

 

七、tony-convert-4.sh: 

原图宽大于destWidth:
{
高>destHeight时:定宽等比缩放 以原图高为高居中裁剪;
否则:从左上角裁剪
}
原图宽小于destWidth:
{
高>destHeight时:以原图高为高居中裁剪;
否则:从左上角裁剪
}

 

复制代码
#!/bin/sh# we have 2 arguments: source file name and dest file nameif [ $# -ne 3 ] ; then   echo "Usage: tony-convert-4.sh [source path] [widthxheigth] [dest path]"  echo "Example: ./tony-convert-4.sh src/1234.jpg 150x150 out/1234_150x150.jpg"  exit 1 fisrcFile="$1"dstFile="$3"destSize="$2"destWidth=${destSize%x*}destHeight=${destSize#*x}echo "destSize: ${destWidth}x${destHeight}"index1=`expr index "${srcFile}" /`echo "index1: $index1"index2=`expr index "${srcFile}" .`echo "index2: $index2"file=`expr substr "${srcFile}" \`expr ${index1} + 1\` \`expr ${index2} - ${index1} - 1\``echo "file: $file"ext=`expr substr "${srcFile}" \`expr ${index2} + 1\` \`expr length "${srcFile}" - ${index2}\``echo "ext: $ext"#identify image numpicCount=`/usr/local/bin/identify ${srcFile}|grep -c "${file}.${ext}"`echo animate pictures: ${picCount}if [ ${picCount} -gt 1 ] ; then  echo "No handle for animate pictures"  cp ${srcFile} ${dstFile}   exit 0 fi#identify image sizesizeMatrix=`/usr/local/bin/identify -format "%wx%h" ${srcFile}`echo "index1: $index1"width=${sizeMatrix%x*}echo width: ${width}height=${sizeMatrix#*x}echo height: ${height}#if [ `echo ${ext}|tr 'a-z' 'A-Z'` = "BMP" ] ; then  #index1=`expr index "${dstFile}" .`  #dstFile=`expr substr "${dstFile}" 1 \`expr ${index1} - 1\``.jpg #finewSize="${destWidth}x${destHeight}"# width < heightif [ ${width} -gt ${destWidth} ] ; then  newSize="'${destWidth}>'"  if [ ${height} -gt ${destHeight}] ; then  heihgtPadding="'${destHeight}/2'"  else  heihgtPadding="'0'"  fielse  newSize="'${width}>'"  if [ ${height} -gt ${destHeight}] ; then    heihgtPadding="'${destHeight}/2'"  else    heihgtPadding="'0'"  fifiecho "newSize: ${newSize}"# resizeresizeCmd="/usr/local/sbin/bin/bin/convert ${srcFile} -quality 90 -resize ${newSize} ${dstFile}"echo "resizeCmd: ${resizeCmd}"eval "${resizeCmd}"# add white groundaddWhiteCmd="/usr/local/sbin/bin/bin/convert ${dstFile} -crop ${destSize}+0-${heihgtPadding} +repage ${dstFile}"echo "addWhiteCmd: ${addWhiteCmd}"eval "${addWhiteCmd}"
复制代码

使用范例:【160*120裁剪或居中加水印】/usr/local/sbin/bin/bin/tony-convert-4.sh [src]{file}.{ext} 160x120 [out]{file}_160.{ext}

 

八、tony-convert-5.sh: 

宽大于高时:定宽等比缩放 高自适应;
宽小于高时:定高等比缩放,宽自适应;
并居中补白

 

复制代码
#!/bin/sh# we have 2 arguments: source file name and dest file nameif [ $# -ne 3 ] ; then   echo "Usage: tony-convert-5.sh [source path] [widthxheigth] [dest path]"  echo "Example: ./tony-convert-5.sh src/1234.jpg 150x150 out/1234_150x2150.jpg"  exit 1 fisrcFile="$1"dstFile="$3"destSize="$2"destWidth=${destSize%x*}destHeight=${destSize#*x}echo "destSize: ${destWidth}x${destHeight}"index1=`expr index "${srcFile}" /`echo "index1: $index1"index2=`expr index "${srcFile}" .`echo "index2: $index2"file=`expr substr "${srcFile}" \`expr ${index1} + 1\` \`expr ${index2} - ${index1} - 1\``echo "file: $file"ext=`expr substr "${srcFile}" \`expr ${index2} + 1\` \`expr length "${srcFile}" - ${index2}\``echo "ext: $ext"#identify image numpicCount=`/usr/local/bin/identify ${srcFile}|grep -c "${file}.${ext}"`echo animate pictures: ${picCount}if [ ${picCount} -gt 1 ] ; then  echo "No handle for animate pictures"  cp ${srcFile} ${dstFile}   exit 0 fi#identify image sizesizeMatrix=`/usr/local/bin/identify -format "%wx%h" ${srcFile}`echo "index1: $index1"width=${sizeMatrix%x*}echo width: ${width}height=${sizeMatrix#*x}echo height: ${height}#if [ ${width} -lt 300 ] ; then#  if [ ${height} -lt 300 ] ; then#    echo Image size less than 300x300#    cp ${srcFile} ${dstFile}#    exit 0#  fi#fiif [ `echo ${ext}|tr 'a-z' 'A-Z'` = "BMP" ] ; then  index1=`expr index "${dstFile}" .`  dstFile=`expr substr "${dstFile}" 1 \`expr ${index1} - 1\``.jpg finewSize="${destWidth}x${destHeight}"# width < heightif [ ${width} -lt ${height} ] ; then  newSize="'x${destHeight}>'"else  newSize="'${destWidth}>'"fiecho "newSize: ${newSize}"# resizeresizeCmd="/usr/local/sbin/bin/bin/convert ${srcFile} -quality 80 -resize ${newSize} ${dstFile}"echo "resizeCmd: ${resizeCmd}"eval "${resizeCmd}"# add white groundaddWhiteCmd="/usr/local/sbin/bin/bin/convert ${dstFile} -background white -gravity center -extent ${destSize} -gravity Center -crop ${destSize}+0+0 +repage ${dstFile}"echo "addWhiteCmd: ${addWhiteCmd}"eval "${addWhiteCmd}"
复制代码
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 昌硕工资不到卡怎么办 上海人去苏州工作社保怎么办 娶个个脾气暴躁的媳妇怎么办 满脸的黑头痘痘怎么办 脚底磨起泡不敢走路怎么办 老婆老是找异性朋友怎么办 喜欢的人有对象怎么办 遇到了更喜欢的怎么办 8岁骨龄11岁怎么办啊 13岁初中生有思想不听话怎么办 交朋友找对象喜欢颜值高的怎么办 儿子找对象不听父母怎么办 缺爱怎么办的搞笑回答 对象说有人追她怎么办 说了一句话媳妇非常生气怎么办 柔顺后头发太臭怎么办 积分兑换手机被骗了怎么办 老板对你的上级不满怎么办 如果老板不给工资怎么办 手机号码被标记为其他公司怎么办? 被标记为骚扰电话怎么办 手机被标记骚扰电话怎么办 360摄像头不支持5g怎么办 摄像头不支持5g网络怎么办 家里的wifi卡了怎么办 办信用卡没有座机号码怎么办 拨打电话时显示号码有误怎么办 个体营业执照怎么办企业支付宝 没满16岁怎么办电话卡 我的电话卡丢了怎么办 公司注销地税没有补齐怎么办 公司没有固定电话怎么办信用卡 申请信用卡公司没有固定电话怎么办 办理信用卡公司没有固定电话怎么办 江门市固话欠费停机后怎么办 物业交钥匙地面有裂缝怎么办 深圳交通卡丢了怎么办 没装etc走etc怎么办 找不到过敏源身体痒怎么办 微信客服电话打不通怎么办 华为手机网络信号不好怎么办