如何在PerlMagick中设置字幕?

时间:2010-10-14 09:18:18

标签: 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获得多行,居中和自动换行的文本?请注意,这需要我使用标题而不是注释或绘制。我宁愿避免手动每行居中,但我会考虑它。

或者,如果有人做了自动换行并使用比例字体和Annotate的样本,那么这对我有用。

编辑:请注意,宝丽来的-caption选项虽然与我正在做的事情共享实现,但与标题:伪图像不同。如果输出与上面的示例转换命令给出的输出非常匹配,我仍然会接受使用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调用,所以我不明白为什么重力被忽略。为什么我不能忽视引力?或者,我怎样才能用这种输出做单词包装和居中文本?

3 个答案:

答案 0 :(得分:2)

如何使用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

答案 1 :(得分:1)

版本:ImageMagick 6.5.7-8

更接近,但仍然不是水平居中,只是垂直居中。有点想法......

#!/usr/bin/perl

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

my $t = Image::Magick->new();
my $b = Image::Magick->new();
$t->SetAttribute(pointsize=>12, size => '100x50', background=>'transparent');
$b->SetAttribute(size => '100x100');
$t->ReadImage('caption:The quick brown fox jumps over the lazy dog.');
$b->ReadImage('xc:transparent');
$b->Composite(image => $t, gravity=>'center', compose=>'over');
$b->Write('out.png');

alt text

答案 2 :(得分:0)

这对我来说适用于Ubuntu 10.04。我只看到“caption”的文档使用“宝丽来”效果。

#!/usr/bin/perl

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

my $im = new Image::Magick;
$im->Set(size => '586x1000');

my $e = $im->ReadImage('xc:black');

$im->Polaroid(
        fill => 'white',
        stroke => 'black',
        strokewidth => 3,
        gravity => 'center',
        pointsize => 78,
        caption => "Lorem ipsum etc etc"
);

$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;

alt text