我有一个目录( <system.serviceModel>
<services>
<service name="Portal.EP1" behaviorConfiguration="debug"></service>
<service name="Portal.EP2" behaviorConfiguration="debug"></service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="debug">
<!-- To avoid disclosing metadata information, set the value below to false before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
),里面有大量图片。我想用每个文件的特定标签来剪辑它们。我有一个文本文件(./img/
),其中包含标签列表:
label1的
LABEL2
LABEL3
label4
...
我使用这个命令:
label.txt
但结果是,所有图像都被montage -label @label.txt -size 512x512 "./img/*.*[120x90]" -geometry +5+5 photo.png
的所有行标记!我如何将它们分开,因此每个图像都会被label.txt
的相关行标记?
答案 0 :(得分:1)
ImageMagick通过解析命令行并从左到右执行参数来工作。
假设我有以下图片:
eh-banner-201606.png
eh-banner-201607.png
eh-banner-201608.png
eh-banner-201609.png
(这些是网站的一些横幅,我手头上最快的图像)
现在,如果我想构建一个具有不同标签的蒙太奇,我必须这样做:
montage -font /usr/share/fonts/TTF/DejaVuSerif.ttf -size 512x512 \
-label 'first image' eh-banner-201606.png \
-label 'second image' eh-banner-201607.png \
-label 'third image' eh-banner-201608.png \
-label 'fourth image' eh-banner-201609.png \
-geometry +5+5 out.png
(-font
参数不是严格需要的,但我把它包含在迂腐中)
这适用于@labelfile
:
montage -font /usr/share/fonts/TTF/DejaVuSerif.ttf -size 512x512 \
-label '@first.txt' eh-banner-201606.png \
-label '@second.txt' eh-banner-201607.png \
-label '@third.txt' eh-banner-201608.png \
-label '@fourth.txt' eh-banner-201609.png \
-geometry +5+5 out.png
每个文件将包含一行(或多行),这些行将成为命令行中下一个图像的标题。
因此,您需要一个脚本来执行您的操作,例如:
#!/bin/bash
LABELS=${1:-./labels.txt}
IMAGES=""
readarray labels < "$LABELS"
i=0
for img in "$@"; do
IMAGES+=" -label '${labels[i]}' $img"
((i++))
done
echo montage -size 512x512 $IMAGES -geometry +5+5 out.png
montage -size 512x512 $IMAGES -geometry +5+5 out.png
您可以做(假设脚本名称为script.sh
):
./script.sh label.txt ./img/*.*120x90
警告:图像文件不能包含空格或特殊的shell字符(这需要第三级引用,这非常容易出错)。请注意,[
和]
是特殊的shell字符,具体取决于上下文。如果您需要更复杂的处理,使用Perl或Python可能更明智。
答案 1 :(得分:1)
我更改了sample code所代表的@grochmal,并且有效:
#!/bin/bash
LABELS=${1:-./labels.txt}
IMAGES=""
readarray labels < "$LABELS"
i=0
echo @ is $@
#copy input argument array in InArg array:
for img in "$@"; do
InArg[$i]=$img
((i++))
done
#get dimensions of InArg array:
arraylength=${#InArg[@]}
#extract Input Image array from InArg array:
for (( i=1; i<${arraylength}; i++ ));
do
ImageArray[$i]=${InArg[$i]}
done
#create IMAGES from some elements of InArg array:
for (( i=1; i<${arraylength}; i++ ));
do
IMAGES+=" -label ${labels[i-1]} ${ImageArray[$i]}"
done
echo "IMAGES is $IMAGES"
echo montage -size 512x512 $IMAGES -font FreeMono-Bold-Oblique -pointsize 30 -geometry '120x90+5+5>' -tile 5x -frame 5 -shadow out.html
montage -size 512x512 $IMAGES -font FreeMono-Bold-Oblique -pointsize 30 -geometry '120x90+5+5>' -tile 5x -frame 5 -shadow out.html