我有一堆 jpeg 图像。说001abcd.jpg
,,,
002abcd.jpg
等等。
我想捕获文件名并将其作为文本添加到图像本身的一角。因此,结果将是,例如,该文件003abcd.jpg
将在该图像的一角印上“003abcd”。 (扩展名不需要存在。)
我想要一个终端命令,可以批量处理数百个图像,并在各自的图像中添加自己的文件名。
我正在使用 Linux Mint 17。
我知道 imagemagick 很有用,但我不懂脚本。
在所有图像中放置一个通用文本很容易。但我不知道如何一次性将唯一的文件名作为相应图像中的文本。
答案1
mogrify
进行批处理,因此您可以使用类似的东西(根据您的口味更改字体、大小、颜色、位置等):
mogrify -font Liberation-Sans -fill white -undercolor '#00000080' \
-pointsize 26 -gravity NorthEast -annotate +10+10 %t *.jpg
%t
将不带扩展名 ( )的文件名添加到jpg
当前目录中的所有 s 中,例如orca-lm-1.jpg
:
这将覆盖您的文件,因此请确保您有备份副本。如果您对输出文件
使用不同的格式(例如),则原始文件将保持不变:png
mogrify -format 'png' -font Liberation-Sans -fill white -undercolor \
'#00000080' -pointsize 26 -gravity NorthEast -annotate +10+10 %t *.jpg
答案2
实际上你可以使用 ImageMagick 来编写文本成图像。使用convert
用于将图像转换为新文件的实用程序(或mogrify
就地转换文件,但我不推荐它,因为如果你犯了错误,你就会丢失原始文件)。您可以使用以下命令指定文本-annotate
选项,其中可以包含转义序列例如%t
不带目录或扩展名的文件名。还有更多选项可以让您控制位置、大小、字体、颜色等。
假设您的文件位于original
当前目录的子目录中。创建一个目录labeled
:
mkdir labeled
要转换图像,请convert
像这样调用:
convert original/001abcd.jpg -fill green -pointsize 20 -annotate +0+0 %t -gravity north-east labeled/001abcd.jpg
之后的第一个参数-annotate
是几何图形,表示文本的位置。+0+0
是角;说-gravity north-east
这是右上角。第二个参数是文本,这里只是表示“使用文件名”的转义序列。
要转换.jpg
目录中的所有文件,请编写一个循环。通配符模式*.jpg
表示文件列表.jpg
,此循环作用于目录.jpg
中的所有文件original
。在循环体中,"$x"
指带目录部分的文件名;"${x##*/}"
指不带目录部分的文件名。
for x in original/*.jpg; do
convert "$x" original/001abcd.jpg -fill green -pointsize 20 -annotate +0+0 %t -gravity north-east "labeled/${x##*/}"
done