Perl GD модуль PNG изображение повреждено или не могу открыть - PullRequest
0 голосов
/ 11 декабря 2018

У меня Windows 10, и я установил Perl v5.26.1, созданный для MSWin32-x64-многопоточности.Двоичная сборка 2601 [404865] предоставлена ​​ActiveState.

Моя проблема в том, что я хочу использовать 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 голосов
/ 11 декабря 2018

По умолчанию версия Perl для Windows открывает файлы в режиме crlf (замена каждой новой строки в выходном потоке на возврат каретки + новая строка).Вы не хотите, чтобы это происходило с вашим потоком png, поэтому вы должны указать Perl использовать режим raw (выходные необработанные байты).

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

- это один из способов сделать это.

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

- это другое.Документация GD и GD::Graph обращает внимание на необходимость binmode несколько раз.

...