繁体   English   中英

Perl Image::Resize 模块和 PNG 图像

[英]Perl Image::Resize module, and PNG images

我想弄清楚如何使用Image::Resize Perl 模块来缩小 PNG 图像。 以下代码确实有效:

        my $image = Image::Resize->new($read_path);
        my $gd = $image->resize(1000,1000);
        open (DISPLAY,">$write_path") || die "Cant write $write_path, Reason: $!";
            binmode DISPLAY;
            if ($read_path =~ /\.jpg$/i) {           
             print DISPLAY  $gd->jpeg();
            } elsif ($read_path =~ /\.gif$/i) {           
             print DISPLAY  $gd->gif();
            } elsif ($read_path =~ /\.png$/i) {           
             print DISPLAY  $gd->png();
            }
        close DISPLAY;

但是,结果不是我想要的(当您转换透明 PNG 时,缩放版本具有黑色背景)

原文: 在此处输入图片说明

缩放:

在此处输入图片说明

如何告诉它在图像上放置白色背景? 我查看了联机帮助页,但没有看到任何有用的信息:

http://search.cpan.org/dist/Image-Resize/Resize.pm

谢谢!

更新:对于任何感兴趣的人,我最终所做的只是使用convert将它们从 .png convert为 .jpg ;

convert "$read_path" -background white -flatten "$path/$filename"

在这种情况下实际上效果更好,因为我们不需要透明度(并且 jpg 的尺寸要小得多)

Image::Resize模块仅用于调整图像大小。

但是,它确实返回一个GD::Image对象。 然后,您可以将gd的全部功能用于您的图像。

方法GD::Image::transparent可能是您正在寻找的。 从文档复制

# allocate some colors
my $white = $im->colorAllocate(255,255,255);

# make the background transparent and interlaced
$im->transparent($white);
$im->interlaced('true');

$im是一个GD::Image对象,在您的情况下由Image::Resize::resize返回。

没有解释特定的问题,我不确定您如何选择黑色背景,但是如果上述方法没有做到,您将找到GD::Image的特定解决方案。


通过链接到这篇文章这篇文章可能会直接给出答案:启用saveAlpha() GD 设置。

感谢威克的评论。

奇怪的是,我在 3 年后对关于 saveAlpha() 设置的公认答案发表评论后,再次遇到了同样的问题。 这次我使用只有 alpha 透明度的源 PNG。 调整大小并另存为 JPG 时,GD 的 saveAlpha() 或 transparent() 设置不起作用。 我每次都得到可怕的黑色背景。

我为修复它所做的是创建一个新图像,应用一个白色填充矩形作为背景,然后在其上应用调整大小的图像:

 my $width = 320; my $height = 240; my $image = GD::Image->new($width,$height); my $white = $image->colorAllocate(255,255,255); $image->filledRectangle(0,0,$width,$height,$white); $image->saveAlpha(0); my $gdo = GD::Image->newFromPng("filename.png"); $image->copyResampled($gdo,0,0,0,0,$width,$height,$gdo->width,$gdo->height); open my $FH,'>',"filename.jpg"; binmode $FH; print {$FH} $image->jpeg; close $FH;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM