newFr-6ren">
gpt4 book ai didi

perl - 使用 Perl 修改图像中的像素

转载 作者:行者123 更新时间:2023-12-01 09:34:28 25 4
gpt4 key购买 nike

假设我想拍摄一张照片,将其所有像素向右移动一个像素,向左移动一个像素,然后保存。我试过这段代码:

my $image_file = "a.jpg";
my $im = GD::Image->newFromJpeg($image_file);
my ($width, $height) = $im->getBounds();
my $outim = new GD::Image($width, $height);

foreach my $x (1..$width)
{
foreach my $y (1..$height)
{
my $index = $im->getPixel($x-1,$y-1);
my ($r,$g,$b) = $im->rgb($index);
my $color = $outim->colorAllocate($r,$g,$b);
$outim->setPixel($x,$y,$color);
}
}
%printing the picture...

这并不能解决问题;它以一种颜色绘制所有像素,但 x=0 或 y=0 的像素除外。我哪里错了?

最佳答案

查看文档:

Images created by reading JPEG images will always be truecolor. To force the image to be palette-based, pass a value of 0 in the optional $truecolor argument.

它没有被索引。尝试将 ,0 添加到您的 newFromJpeg 调用中。

从评论来看,您的下一个问题似乎是要分配的颜色数量。默认情况下,索引图像是 8 位的,这意味着最多 256 种不同的颜色 (2^8=256)。 “简单”的解决方法当然是使用真彩色图像,但这取决于您是否可以接受真彩色输出。

如果没有,您的下一个挑战将是提出“最佳”的 256 色集,以最大限度地减少图像本身的可见缺陷(参见 http://en.wikipedia.org/wiki/Color_quantization)。这本身就是一个完整的话题,我们今天很少需要担心。如果您仍然需要担心它,您最好将这项工作卸载到一些专门的工具,如 Imagemagik 或类似的工具,而不是尝试自己实现它。当然,除非你喜欢挑战。

关于perl - 使用 Perl 修改图像中的像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9623538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com