2011-09-19 45 views
0

我有这个很酷的小片段,我发现它为影像添加了阴影。 (使用ImageMagick,我觉得..)命令行字符串检查和参数传递(ImageMagick)

image-shadow() { 
    out=${1%.*}-shadow.${1#*.} 
    in=$1 
    echo "Converted file : $out" 
    if [ ! -z $2 ] ; then 
    convert $in -frame $2 $out 
    in=$out 
    fi 
    convert $in \(+clone -background black -shadow 60x5+3+3 \) \ 
    +swap -background transparent -layers merge +repage $out 
    } 

我们使用:

image-shadow test.png 0x0 

添加为0x0边框,和3x3的影子,作为函数中定义...

现在,我有* -hd.png图像和* .png图像..并且想要将* .png和6x6的3x3阴影添加到* -hd.png(显然,视网膜图形..)

1-我如何比较图片的名称,并决定

2-如何通过影子尺寸

谢谢!

回答

2

对于1:使用发现,它确实是这样工作的瑞士军刀:

find '(' -name '*.png' -and -not -name '*-hd.png' ')' -exec image-shadow '{}' 0x0 ';' 

当然,你必须给你的函数保存为单个shell文件,而不是一个shell功能,但无论如何,这对于代码重用来说都是可取的。

对于2 .:使用另一个命令行参数,该参数在函数中被引用为$ 3。

+0

看起来不错! ..关于1)..你为什么使用:'{}'?这些是为了什么? ...通常不会将查找结果保存到变量中,然后使用它? – Mazyod

+0

哦,等等..这是一个选项> _> ..对此,我不习惯阅读命令行代码。 – Mazyod

+1

是的,{}被传递给find和all。 find语法稍微有些棘手,但是man find是值得阅读的。 – thiton

1
for f in *.png; do 
    case "$f" in 
    *-hd.png) shadow="6x6" ;; 
    *) shadow="3x3" ;; 
    esac 
    image-shadow "$f" $shadow 
dona