Perl GD 不画圆,而是每次画一个矩形

Posted

技术标签:

【中文标题】Perl GD 不画圆,而是每次画一个矩形【英文标题】:Perl GD does not draw circles, instead it draws a rectangle every time 【发布时间】:2013-07-30 13:16:07 【问题描述】:

我最近发现了 Perl 模块 GD,我想尝试一下。 到目前为止,我在创建新对象、分配颜色并将整堆数据重定向到文件中都没有遇到任何问题。 当我在查看器中打开图像文件时,问题出现了: 无论我改变什么,它都只是显示一个矩形。为了取笑我,它只有正确的颜色(蓝色)。

怎么了?圈子的创建不正确吗?

我会继续努力,但我们不胜感激。 提前感谢您的帮助!

这是我目前的代码:

my $image1 = new GD::Image(100,100);
my $blue = $image1->colorAllocate(0,0,255);
$image1->arc(100,100,50,50,0,360,$blue);
my $print = $image1->png;

open(IMG,">","/home/bernd/perl/pie.png");
binmode IMG;
print IMG $print;
close(IMG);

【问题讨论】:

你使用use strict; use warnings吗?也许GD会告诉你什么是错的。顺便说一句:GLOB 文件句柄已过时。您应该使用词法文件句柄。 open(my $fh,">","/home/..." 好的,谢谢你的提示!我刚刚解决了这个问题,我只需要改变圆圈的颜色。第一个分配的颜色成为背景(蓝色),圆圈使用该颜色,所以什么都看不到。我现在觉得自己很蠢,但也许这对其他初学者有帮助。 我知道那种感觉:D。很高兴你成功了 【参考方案1】:

我认为问题在于背景和前景颜色相同。

这是一个工作示例,它在透明物体上绘制一个蓝色圆圈 背景:

use GD::Image;
use File::Slurp;

my $image1 = GD::Image->new(100,100);
my $white = $image1->colorAllocate(255,255,255);
my $blue = $image1->colorAllocate(0,0,255);
$image1->transparent($white);
$image1->interlaced('true');

$image1->arc(50,50,100,100,0,360,$blue);

write_file("/home/bernd/perl/pie.png", $image1->png);

我还更新了对象创建以避免使用间接 不推荐使用new GD::Image() 的对象符号样式。 File::Slurp 用于清理写出文件。

如果您不熟悉使用 Perl 进行图像处理,我建议您 还可以查看具有更现代设计的 Imager.pm。

【讨论】:

【参考方案2】:

尝试添加:

my $image1 = new GD::Image(100,100);
my $white = $image1->colorAllocate(255,255,255);
my $blue = $image1->colorAllocate(0,0,255);

您正在绘制与背景颜色相同的圆弧

【讨论】:

谢谢你们的快速回答,但我自己解决了这个问题。我觉得很愚蠢,因为这并不明显,但很容易。没关系,现在一切正常(:谢谢,祝您有美好的一天!

以上是关于Perl GD 不画圆,而是每次画一个矩形的主要内容,如果未能解决你的问题,请参考以下文章

用canvas画只有一个角是圆角的矩形,能画出来么?

html 里怎么画一个矩形

css3画矩形,矩形里面有多个圆圈,圆圈里面有字,如何实现?

简单谈谈自己对htm与css中画圆的理解。

MFC编程ellipse()怎么画圆

c# 矩形框