2011-09-19 3 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으로 테두리와 3 × 3 그림자를 추가 할 수 ...

을 지금, 나는 * -hd.png 이미지와 * .png 이미지가 있습니다. * * .png에 3x3 그림자를 추가하고 * -hd.png (분명히 망막 그래픽 ..)에 6x6을 추가하고 싶습니다.

1- 어떻게 이미지 이름을 비교하고 결정할 수 있습니까?

2 그림자 크기를 어떻게 전달할 수 있습니까?

감사합니다.

답변

2

를 들어 1 : 사용은 정말 같은 작업에 대한 스위스 군용 칼, 찾을 : 물론

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

, 대신 쉘 기능의 단일 쉘 파일로 저장 기능을해야합니다 어쨌든 이것은 코드 재사용에 바람직합니다.

2 : 다른 명령 줄 인수를 사용하십시오.이 인수는 함수에서 $ 3으로 참조됩니다.

+0

.. 약 1) .. 왜 '{}'을 사용합니까? 이게 뭐야? ... 일반적으로 find에서 결과를 변수에 저장하지 않고 사용 하시겠습니까? – Mazyod

+0

오 기다려 .. 그 옵션> _> .. sry에 대해, 나는 명령 줄 코드를 읽는 데 익숙해 질 수 없다. – 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