[英]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.