【问题标题】:Perl Image Resize using GD and maintain image qualityPerl Image Resize 使用 GD 并保持图像质量
【发布时间】: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 图像,都给了我相同的结果(图像质量差)..

标签: image perl gd


【解决方案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); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      相关资源
      最近更新 更多