首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PerlMagick中居中显示字幕?

如何在PerlMagick中居中显示字幕?
EN

Stack Overflow用户
提问于 2010-10-14 17:18:18
回答 3查看 1.6K关注 0票数 4

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

代码语言:javascript
复制
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中做同样的事情,这样我就不必在执行其他步骤时不断地读写文件。这是我到目前为止所知道的

代码语言:javascript
复制
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命令给出的结果非常匹配,我仍然会接受使用宝丽来和-caption的答案。

编辑2:这里是这个问题的一个更小的例子。

代码语言:javascript
复制
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;

预期结果:文本居中。

实际结果:文本左对齐。

实际结果应与此命令的输出相同:

代码语言:javascript
复制
convert -background '#0000' -size 100x100  -pointsize 12 -gravity center caption:'The quick brown fox jumps over the lazy dog.' out.png

从perlmagick源代码看,我没有看到任何应该拦截特定SetAttribute调用的东西,所以我不明白为什么重力会被忽略。我怎样才能让重力不被忽略呢?或者,我怎么才能用这种输出做word包装和居中的文本呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-22 11:59:02

版本: ImageMagick 6.5.7-8

更近,但仍然不是水平居中,而是垂直居中。有点想不出来了.

代码语言:javascript
复制
#!/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');

票数 1
EN

Stack Overflow用户

发布于 2010-10-21 21:43:16

使用Annotate()怎么样?

代码语言:javascript
复制
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');

票数 2
EN

Stack Overflow用户

发布于 2010-10-21 10:49:33

这对我来说可以在Ubuntu 10.04上运行。我只看到使用“宝丽来”效果的“标题”文档。

代码语言:javascript
复制
#!/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;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3931735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档