Emm*_*ndo 10 shell-script imagemagick image-manipulation text
我有一堆 jpeg 图像。说001abcd.jpg
,,
002abcd.jpg
等等。
我想捕获文件名并将其作为文本添加到图像本身的一个角落。因此,结果将是,例如,该文件003abcd.jpg
将在该图像的一个角印上“003abcd”。(扩展名不必在那里。)
我想要一个可以批量处理数百张图像并在其各自的图像中添加自己的文件名的终端命令。
我正在使用 Linux Mint 17。
有人告诉我 imagemagick 可能很有用,但我不知道脚本。
在所有图像中放置一个通用文本很容易。但我不知道如何一次性将唯一的文件名作为相应图像中的文本。
don*_*sti 10
mogrify
做批处理,所以你可以使用这样的东西(根据你的口味改变字体、大小、颜色、位置等):
mogrify -font Liberation-Sans -fill white -undercolor '#00000080' \
-pointsize 26 -gravity NorthEast -annotate +10+10 %t *.jpg
Run Code Online (Sandbox Code Playgroud)
将不带扩展名 ( %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
Run Code Online (Sandbox Code Playgroud)
事实上,您可以使用 ImageMagick 将文本写入图像。使用该convert
实用程序将图像转换为新文件(或mogrify
就地转换文件,但我不推荐它,因为如果您犯了错误,您就会丢失原始文件)。您可以使用选项指定文本-annotate
,该文本可以包含转义序列,例如%t
不带目录或扩展名的文件名。还有更多选项可以让您控制位置、大小、字体、颜色等。
假设您的文件位于original
当前目录的子目录中。创建一个目录labeled
:
mkdir labeled\n
Run Code Online (Sandbox Code Playgroud)\n\n要转换图像,请convert
像这样调用:
convert original/001abcd.jpg -fill green -pointsize 20 -annotate +0+0 %t -gravity north-east labeled/001abcd.jpg\n
Run Code Online (Sandbox Code Playgroud)\n\n之后的第一个参数-annotate
是几何图形,表示文本的位置。+0+0
是角;说-gravity north-east
这是右上角。第二个参数是文本,这里只是转义序列,表示\xe2\x80\x9cuse文件名\xe2\x80\x9d。
要转换.jpg
目录中的所有文件,请编写一个循环。通配符模式*.jpg
表示文件列表.jpg
,此循环作用于目录.jpg
中的所有文件original
。在循环体中,"$x"
指带目录部分的文件名;"${x##*/}"
指不带目录部分的文件名。
for x in original/*.jpg; do\n convert "$x" original/001abcd.jpg -fill green -pointsize 20 -annotate +0+0 %t -gravity north-east "labeled/${x##*/}"\ndone\n
Run Code Online (Sandbox Code Playgroud)\n