我正在尝试更改 PNG 文件中某些像素的颜色。作为测试,以下脚本应读取 (256x256) PNG 文件,在其上绘制红色对角线,并将生成的图像写入文件。有一条对角线,但它是白色的。我错过了什么?
#!/usr/bin/env perl
use GD;
$in_file = "in_file.png";
open($PNG,"<$in_file");
$im = newFromPng GD::Image($PNG) or die "Cannot open $in_file for importing";
close($PNG);
$red = $im->colorAllocate(255,0,0);
for($i=0;$i<256;$i++) {
$im->setPixel($i,$i,$red);
}
$out_file = "out_file.png";
open($IF,">$out_file") or die "Cannot open $out_file for writing?";
binmode $IF;
print $IF $im->png();
close($IF);
在 Ubuntu 23.10 上测试:首先我创建了一个空白的蓝色图像:
convert -size 256x256 xc:blue in_file.png
使用以下脚本:
#! /usr/bin/env perl
use v5.38;
use GD;
my $in_file = "in_file.png";
my $out_file = "out_file.png";
my $im = GD::Image->newFromPng($in_file) or die "Cannot open $in_file for importing";
my $red = $im->colorAllocate(255,0,0);
for(my $i=0; $i<256; $i++) {
$im->setPixel($i,$i,$red);
}
open(my $IF,">:raw", $out_file) or die "Cannot open $out_file for writing";
print $IF $im->png();
close($IF);
结果: