如何使用 Perl 和 GD 调整 PNG 大小时保持透明度
这是我正在使用的代码:
!/usr/bin/perl
use GD;
sub resize
{
my ($inputfile, $width, $height, $outputfile) = @_;
my $gdo = GD::Image->new($inputfile);
## Begin resize
my $k_h = $height / $gdo->height;
my $k_w = $width / $gdo->width;
my $k = ($k_h < $k_w ? $k_h : $k_w);
$height = int($gdo->height * $k);
$width = int($gdo->width * $k);
## The tricky part
my $image = GD::Image->new($width, $height, $gdo->trueColor);
$image->transparent( $gdo->transparent() );
$image->copyResampled($gdo, 0, 0, 0, 0, $width, $height, $gdo->width, $gdo->height);
## End resize
open(FH, ">".$outputfile);
binmode(FH);
print FH $image->png();
close(FH);
}
resize("test.png", 300, 300, "tested.png");
输出图像具有黑色背景,并且所有 Alpha 通道都丢失。
我正在使用此图片: http://i54.tinypic.com/33ykhad.png
这结果是: http://i54.tinypic.com/15nuotf.png
我尝试了所有组合alpha() 和 transparancy() 等东西,它们都不起作用......
请帮助我解决这个问题。
This is the code i'm using:
!/usr/bin/perl
use GD;
sub resize
{
my ($inputfile, $width, $height, $outputfile) = @_;
my $gdo = GD::Image->new($inputfile);
## Begin resize
my $k_h = $height / $gdo->height;
my $k_w = $width / $gdo->width;
my $k = ($k_h < $k_w ? $k_h : $k_w);
$height = int($gdo->height * $k);
$width = int($gdo->width * $k);
## The tricky part
my $image = GD::Image->new($width, $height, $gdo->trueColor);
$image->transparent( $gdo->transparent() );
$image->copyResampled($gdo, 0, 0, 0, 0, $width, $height, $gdo->width, $gdo->height);
## End resize
open(FH, ">".$outputfile);
binmode(FH);
print FH $image->png();
close(FH);
}
resize("test.png", 300, 300, "tested.png");
The output image has a black background and all alpha channels are lost.
I'am using this image: http://i54.tinypic.com/33ykhad.png
This is the result: http://i54.tinypic.com/15nuotf.png
I tried all combinations of alpha() and transparancy() etc. things, none of them worked.....
Pleas help me with this issue.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用 PHP 的 GDlib 时可以保留 PNG 图像透明度吗图像复制重新采样?
Can PNG image transparency be preserved when using PHP's GDlib imagecopyresampled?