perl - 如何在 PerlMagick 中居中字幕?

标签 perl imagemagick

在命令行上使用 ImageMagick 我可以说

convert -background '#0000' -fill white -stroke black -strokewidth 3 -gravity center -pointsize 78 -size 568x1000 caption:'Lorem ipsum etc etc' -trim +repage out.png

并产生我正在寻找的输出。我想做的是同样的事情,但在 PerlMagick 中,这样我就不必在执行其他各种步骤时继续读取和写入文件。这是我到目前为止所拥有的
use strict;
use warnings;
use Image::Magick;

my $im = new Image::Magick;
my $e = $im->Set(
        background => '#0000',
        fill => 'white',
        stroke => 'black',
        strokewidth => 3,
        gravity => 'center',
        pointsize => 78,
        size => '586x1000',
);
die $e if $e;

$e = $im->Read("caption:Lorem ipsum etc etc");
die $e if $e;

$e = $im->Trim();
die $e if $e;

$e = $im->Set(page=>'0x0+0+0'); # +repage
die $e if $e;

$e = $im->Write('out.png');
die $e if $e;

这完全相同,除了生成的文本没有居中。

PerlMagick 上的文档几乎不存在。我在一些 MagicWand 示例的基础上建立了这种“阅读标题”语法,据称这将导致文本居中。显然 PerlMagick 有所不同。

所以,问题是:在这种情况下,我怎样才能让 PerlMagick 尊重重力?如何通过 PerlMagick 获得多行、居中和自动换行的文本?请注意,这要求我使用标题而不是注释或绘制。我宁愿避免手动每行居中,但我会考虑。

或者,如果有人有一个使用自动换行和比例字体和注释的样本,那么这对我有用。

编辑:请注意宝丽来的 -caption 选项,虽然它与我正在做的共享实现,但与标题不同:伪图像。如果输出与上面的示例 convert 命令给出的输出非常匹配,我仍然会接受使用 polaroid 和 -caption 的答案。

编辑 2:这是问题的一个更小的例子。
use strict;
use warnings;
use Image::Magick;

my $im = new Image::Magick;
my $e = $im->SetAttribute(
        background => '#0000',
        pointsize=>12,
        size => '100x100',
        gravity => 'center',
);
die $e if $e;
$e = $im->ReadImage('caption:The quick brown fox jumps over the lazy dog.');
die $e if $e;
$e = $im->Write('out.png');
die $e if $e;

预期结果:文本居中。

实际结果:文本左对齐。

实际结果应与此命令的输出相同:
convert -background '#0000' -size 100x100  -pointsize 12 -gravity center caption:'The quick brown fox jumps over the lazy dog.' out.png

通过查看 perlmagick 源代码,我看不到任何应该拦截特定 SetAttribute 调用的内容,因此我不明白为什么忽略了重力。我怎样才能让重力不被忽视?或者,我还能如何使用这种输出来处理文字环绕和居中的文本?

最佳答案

使用 Annotate() 怎么样?

use strict;
use warnings;
use Image::Magick;

my $im = Image::Magick->new();
$im->Set(size => "1000x568");
$im->ReadImage('xc:black');
$im->Annotate(text => "Lorem ipsum etc etc",
              gravity => "Center",
              fill => 'white',
              stroke => 'black',
              strokewidth => 3,
              pointsize => 78);
$im->Write('myout.png');

alt text

关于perl - 如何在 PerlMagick 中居中字幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3931735/

相关文章:

perl - 如何使用 ppm 升级所有可升级的软件包?

perl - 如何在 Perl 中使用哈希生成唯一 ID?

在 Erlang/Elixir 中用多个 png 文件合成 jpeg 图像

ruby-on-rails - 使用 ImageMagick 对图片进行圆角处理

perl - 带有Perl的excel文件中的列标题

perl - 为什么 TextMate 在运行 Perl 脚本时总是提示 'Can' t find string terminator '"'' ?

imagemagick - 在 Imagemagick 中创建空白图像

ruby - 将一张图像合成到另一张图像上时,RMagick 透明度不起作用

linux - imageMagick 在 Linux 中从文件夹转换为另一个命令?

perl - 如何在Test::Class中使用Moose?