我最近接管了别人在项目上的职位。当下面的代码在他们的旧机器上运行时,它工作正常。但是当我运行它时,我得到一条带有红色轮廓的黄色矩形的空白线。从本质上讲,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 Mavericks 10.9.3; ImageMagick 6.8.9-1 / PerlMagick 6.88(通过Homebrew安装)
答案 0 :(得分: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');
希望这可以帮助遇到此问题的其他任何人!