1

我有两张图片。我创建了一个 .sh 文件来操作它。首先,我为此使用for循环..

我的导演结构:-

测试图像文档 newimage angelimage test.sh 5elements10.png boltonclinics5.png

现在我希望将 2 个图像与 3rd.png 合成并存储在newimage中,之后我希望将newimage文件夹中的图像转换为特定的天使。所以我尝试使用代码

   #!/bin/bash
for f in $( ls *.png ); do
  composite -gravity center $f ./doc/back.png ./newimage/new$f
done 
for f in `ls ./newimage`; do

  convert $f -rotate -7 ./angelimage/ang$f
done

现在我发现 for 循环可以正常工作,但是第二个循环会出现如下错误

convert: unable to open image `new-5elements10.png':  @ error/blob.c/OpenBlob/2587.
convert: unable to open file `new-5elements10.png' @ error/png.c/ReadPNGImage/3234.
convert: missing an image filename `new-5elements10.png' @ error/convert.c/ConvertImageCommand/3011.
convert: unable to open image `new-boltonclinics5.png':  @ error/blob.c/OpenBlob/2587.
convert: unable to open file `new-boltonclinics5.png' @ error/png.c/ReadPNGImage/3234.
convert: missing an image filename `new-boltonclinics5.png' @ error/convert.c/ConvertImageCommand/3011.
4

1 回答 1

-1

不要使用 ls(1) 生成提供给命令的文件列表。简单的 glob 扩展就足够了(如下所示)。

引用您的变量以防止出现空格问题。

如果您的代码中没有任何其他逻辑错误,则应该可以:

#!/bin/bash

for f in *.png;
do
    composite -gravity center "$f" ./doc/back.png "./newimage/new${f}"
done 

for f in ./newimage/*;
do
    convert -rotate -7 "$f" "./angelimage/ang$(basename "$f")"
done
于 2012-06-14T10:40:01.250 回答