将文本块插入到 png 图像中
我正在寻找一个简单的命令行工具(在 Linux 上)将文本块(例如版权)插入到 png 文件中,从而生成一个新的 png 文件:
> png-insert-text-chunk "here's my text chunk" < in.png > out.png
注意:“插入文本块”并不是指“插入文本块” “在图像上绘制一些文字”。我的意思是:将文本作为块插入到 png 文件中,位于 技术意义。例如,这可用于插入实际图像上未显示的版权消息。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
使用 ImageMagick 的
convert
和-set
选项:-set
选项用于设置元数据元素。对于 PNG 来说,这些通常会分成tEXt
块。Use ImageMagick's
convert
and the-set
option:The
-set
option is used to set metadata elements. In the case of PNG these often go intotEXt
chunks.我已经四处寻找实用程序来执行此操作,但尚未找到任何真正符合我想做的事情。所以我决定构建我自己的,事实证明这并不太难。实用程序
png-text-dump
显示 PNG 图像中的所有文本块。它仅取决于 libpng。实用程序png-text-append
将文本块插入到 PNG 图像中。它仅依赖于标准 C 库 - 我最初尝试使用 libpng 来实现此功能,但实际上发现仅使用 PNG 规范从头开始工作更容易。I have searched around for utilities to do this, and not yet found anything that really matches what I want to do. So I decided to build my own, which it turns out is not too hard. The utility
png-text-dump
displays all text chunks in a PNG image. It depends only on libpng. The utilitypng-text-append
inserts text chunks into a PNG image. It depends only on the standard C library - I had initially tried to implement this using libpng, but actually found it easier to work from scratch using only the PNG specification.这可以使用 python pypng 模块实现。 python3示例代码如下:
This can be implemented with python pypng module. The python3 example code is below:
注意:此答案是对问题原始修订版的回应,其中不清楚文本是否必须写入图像上,或者文本是否必须作为元数据嵌入到图像二进制文件中。这个答案假设是前者。然而,该问题经过编辑以澄清这意味着后者。这个答案保持不变,以防有人正在寻找前者的解决方案。
上面示例中的
20,20
是我想要放置文本的坐标。您需要使用 imagemagick 包来获取此命令。
在 Ubuntu 或 Debian 上,可以使用以下命令安装:
apt-get install imagemagick
。下面是该命令的更详细的用法:
Note: This answer was a response to the original revision of the question where it was not clear if the text had to be written on the image or if the text had to be embedded within the image binary file as metadata. This answer assumed the former. However the question was edited to clarify that it meant the latter. This answer is left intact, in case someone is looking for a solution to the former.
The
20,20
in the above example is the co-ordinate where I want to place the text.You need to use the imagemagick package to get this command.
On Ubuntu or Debian, it can be installed with the command:
apt-get install imagemagick
.Here is a slightly more elaborate usage of the command:
我相信pngcrush有这个能力: http://pwet.fr/man/linux/commandes/pngcrush
I believe that pngcrush has this ability: http://pwet.fr/man/linux/commandes/pngcrush
添加到 @susam-pal 所做的评论,要更改颜色,请使用选项
-fill color
此选项接受颜色名称、十六进制颜色或数字 RGB, RGBA、HSL、HSLA、CMYK 或 CMYKA 规范。有关如何正确指定颜色参数的说明,请参阅颜色名称。
将颜色规范括在引号中,以防止 shell 解释“#”或括号。
例如,
-fill blue
-fill "#ddddff"
-fill "rgb(255,255,255)"
从 链接
Adding to the comment made by @susam-pal, to change color use the option
-fill color
This option accepts a color name, a hex color, or a numerical RGB, RGBA, HSL, HSLA, CMYK, or CMYKA specification. See Color Names for a description of how to properly specify the color argument.
Enclose the color specification in quotation marks to prevent the "#" or the parentheses from being interpreted by your shell.
For example,
-fill blue
-fill "#ddddff"
-fill "rgb(255,255,255)"
Obtained from link
您可以在 Python 中使用 pypng 库:
You can use the pypng library in Python:
我从pypng中提取了读写png-text-chunk的核心算法。这是最简单的例子。它比原始 pypng 实现快 10 倍
I extracted the core algorithm of reading and writing png-text-chunk from pypng. This is the simplest example. And it's 10x faster than original pypng implementation