0

我最近接手了别人在一个项目上的职位。当下面的代码在他们的旧机器上运行时,它运行良好。但是当我运行它时,我得到一个空白的白线,带有一个带有红色轮廓的黄色矩形。本质上,Draw() 方法工作正常,但 Annotate() 方法没有做任何事情。无论我为文本、字体、字体大小或颜色传递什么值,都不会显示任何文本。

以下是相关代码:

my ($length,$width,$boxRef,$text,$font,$fontSize,$fontColor,$outFile) = @_;

my $image = Image::Magick->new;
$image->Set(size=>$length."x".$width);
$image->ReadImage('xc:white');
$image->Draw(primitive=>'rectangle',stroke=>'red',fill=>'yellow',points=>"$$boxRef[0],$$boxRef[1],$$boxRef[2],$$boxRef[3]");
my $y = $image->Annotate(text=>$text,font=>$font,fill=>$fontColor,pointsize=>$fontSize,geometry=>'+0+20');
warn "$y" if "$y";
my $x = $image->Write($outFile);
warn "$x" if "$x";
undef $image;

我很确定代码没有问题,因为其他更简单的脚本也不起作用。我相信我的机器或 ImageMagick 的安装有问题,但我不知道出了什么问题。

我的老板说他记得上一个人在字体问题上苦苦挣扎,所以也许这与它有关?过去一天左右我一直在做一些挖掘工作,但我没有找到任何与我的问题很相似的东西,可以提供一个很好的解决方案。

有谁知道为什么我不能让 ImageMagick 显示文本?

关于我的设置的一些信息:

OS X 小牛队 10.9.3;ImageMagick 6.8.9-1 / PerlMagick 6.88(通过 Homebrew 安装)

4

1 回答 1

0

我想通了大家!事实证明这确实是字体的问题。我在 perlmonks 帖子上找到了解决方案。即使使用的字体在机器上,有时它也找不到它(但在其他机器上它会出于任何原因)。所以这个位置必须是硬编码的。

将注释行更改为以下内容:

# font has to be hard-coded in
my $y = $image->Annotate(text=>$text,font=>'/System/Library/Fonts/Courier.dfont',fill=>$fontColor,pointsize=>$fontSize,geometry=>'+0+20');

希望这可以帮助遇到此问题的其他人!

于 2014-06-09T20:05:11.693 回答