Perl GD模块PNG图像损坏或无法打开

时间:2018-12-10 23:12:34

标签: perl png gd

我正在运行Windows 10,并且已经安装了针对MSWin32-x64-multithread构建的Perl v5.26.1。 ActiveState提供的二进制版本2601 [404865]。

我的问题是我想使用GD :: Graph。

一切都很好。我编写了代码,并进行了语法检查,一切都很好。当我运行脚本时,我得到的只是胡说八道。我尝试改为输出到* .png文件,但是文件已损坏。

这使我疯狂。我在这里做错了什么?任何帮助将非常感激。以下是代码

#!usr/bin/perl -w
use strict;
use GD::Graph::area;
# File: prob1.pl

my @x = (0, 0, 0.00759, 0.018975, 0.036053, 0.216319, 0.449715, 0.648956, 
0.815939, 0.935484, 1);
my @y = (0, 0.053763, 0.16129, 0.308244, 0.577061, 0.792115, 0.874552, 
0.924731, 0.964158, 0.989247, 1);

my @data = (\@x, \@y);

my $graph = GD::Graph::area->new(500, 300);

$graph->set( x_label=>'False Positive Rate', y_label=>'True Positive 
Rate',title=>'ROC Curve') or warn $graph->error;

my $image = $graph->plot(\@data) or die $graph->error;

open IMG, ">prob1.png" or die "can't open prob1.png\n";
print IMG $image->png;
exit;

1 个答案:

答案 0 :(得分:1)

默认情况下,Windows版本的Perl以crlf模式打开文件(将输出流中的每个新行替换为回车+新行)。您不希望在png流中发生这种情况,因此需要告诉Perl使用raw模式(输出原始字节)。

open IMG, ">:raw", "prob1.png";

是做到这一点的一种方法。

open IMG, ">", "prob1.png";
binmode IMG;

是另一个。 GDGD::Graph文档都多次引起对binmode需求的关注。