Perl Image Resize 使用 GD 并保持图像质量
Posted
技术标签:
【中文标题】Perl Image Resize 使用 GD 并保持图像质量【英文标题】:Perl Image Resize using GD and maintain image quality 【发布时间】:2013-12-10 03:27:11 【问题描述】:我正在尝试使用 GD 图像库和 perl 调整图像大小,但是当它调整大小时,图像的质量与原始上传的图像不同..你们有什么建议吗?
下面是我的代码
my $dest_w = $width;
my $dest_h = $width * ($h / $w);
my $dest = GD::Image->new($dest_w, $dest_h, 1);
$dest->copyResampled($src, 0, 0, 0, 0, $dest_w, $dest_h, $w, $h);
open OUT, ">$target" or die "Could not save to $target";
binmode OUT;
print OUT $img->jpeg($quality);
close OUT;
我的代码有什么问题吗?谢谢建议
注意:我上传了 .png 图片。即使上传.jpeg图片,图片质量也会下降
【问题讨论】:
您正在对 JPEG 进行无操作调整大小。是的,这会导致质量下降,因为它是 JPEG。 嗨,Charles,我应该如何处理我的代码?感谢您的建议 将其保存为无损文件? 您的来源图像类型是什么?如果它是基于调色板的图像,结果会比它是真彩色图像更差。您应该将 GD 设置为默认为 trueColor 图像。 我尝试了 .png 和 .jpeg 图像,都给了我相同的结果(图像质量差).. 【参考方案1】:你必须使用GD吗?如果您使用 GD 调整输入图像的大小,例如 Perl 中的 .jpg,即使使用
my $quality = 100;
print OUT $resultimage->jpeg($quality);
然后至少在当前版本中,正如我刚刚测试过的那样,GD 和 Imlib2(质量也设置为 100)都比 Perl 中的 ImageMagick 产生了更多的模糊。此外,如果将调整大小的 jpg 图像保存为 .gif(或 .png),则效果最佳,例如:
#! /usr/bin/perl
use Image::Magick;
my($inimage, $resultimage, $info);
$inimage = Image::Magick->new;
$info = $inimage->Read('exampleimagebig.jpg');
warn "$info" if "$info";
$info = $inimage->Resize(geometry=>'500x500', blur=>0.9);
warn "$info" if "$info";
# In the next line you can write .png or if you must, .jpg:
$info = $inimage->Write('exampleimage500.gif');
warn "$info" if "$info";
【讨论】:
【参考方案2】:尝试在我的示例中定义 $quality 并在输入时使用 png 尝试它。
binmode OUT;
$quality=100;
print OUT $img->jpeg($quality);
【讨论】:
以上是关于Perl Image Resize 使用 GD 并保持图像质量的主要内容,如果未能解决你的问题,请参考以下文章
无法通过包“GD::Image”定位对象方法“newFromPng”