2013-12-10 49 views
1

我想使用GD圖像庫和perl調整圖像大小,但是當調整圖像大小時,圖像質量與原始上傳圖像不一樣..您是否有任何建議?Perl圖像使用GD調整大小並保持圖像質量

下面是我的代碼

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圖片,圖片的質量也會下降

+0

您正在對JPEG進行無操作調整大小。是的,這會導致質量降低,因爲它是JPEG。 – Charles

+0

嗨查爾斯,我該怎麼處理我的代碼?感謝您的建議 –

+0

將它保存爲不是有損的東西? – Charles

回答

0

嘗試在我的示例中定義$ quality,然後在輸入時使用png嘗試。

binmode OUT; 
$quality=100; 
print OUT $img->jpeg($quality); 
0

您是否必須使用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"; 
相關問題