将文件名作为文本添加到图像文件的一角

将文件名作为文本添加到图像文件的一角

我有一堆 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

相关内容