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”

如何使用 Strawberry Perl 安装 GD 库

安装 perl GD 模块的问题

使用 Perl/GD 创建图像并将其直接插入到 Excel 工作簿中?

(Perl 的)GD 图表 - 绘制数据的限制?

如何通过 Imagick 实现 imagecopy (GD) 功能?