2011-02-11 74 views
1

我使用Perl Magick這是Image Magick的Perl模塊將圖像從GIF和PNG轉換爲JPEG。一切工作完美,直到我嘗試轉換具有透明背景的圖像。在Perl中設置背景顏色Magick圖像轉換

Resize()函數的默認行爲是使用黑色,這會破壞我們嘗試轉換的圖像。我想改爲將默認背景顏色更改爲白色,並且無法弄清楚如何執行此操作。

如果在命令行上使用難懂的,你可以通過改變背景:

convert image.gif -background \#FFFFFF -flatten image.jpg 

這裏是我使用的調整和轉換圖像的Perl代碼:

use Image::Magick; 
my $image = Image::Magick->new(); 
$image->Read("input.png"); 
$image->Resize(geometry=>'500x'); 
$image->Write("output.jpg"); 

我嘗試以下,以得到它的工作,但無濟於事:

use Image::Magick; 
my $image = Image::Magick->new(); 
$image->Read("input.png"); 
$image->Set(background => 'white'); 
$image->Flatten(); 
$image->Resize(geometry=>'500x'); 
$image->Write("output.jpg"); 

而且也:

use Image::Magick; 
my $image = Image::Magick->new(); 
$image->Read("input.png"); 
$image->Resize(geometry=>'500x',background=>'white'); 
$image->Write("output.jpg"); 

我想了解如何成功地爲Perl Magick Resize()方法設置默認背景顏色。在此先感謝您的幫助!

回答

1

不幸的是,我無法以乾淨的方式工作,只是使用Resize()方法並傳遞給它一個適當的參數來設置背景顏色。

相反,我所做的解決問題的方法是先將文件轉換爲JPG格式,然後調整大小。這是可行的,因爲Image Magick的默認背景顏色是白色的,所以在轉換過程中背​​景被正確設置,然後Resize()方法簡單地使用JPG圖像而不必做任何解釋。

在我的估計中不是理想的解決方案,但它確實可靠地工作。

0

你嘗試

$image->Flatten(background => 'white'); 
+0

我也試過。它似乎也沒有工作。圖像調整大小後,仍然出現黑色背景。任何其他想法? –

4

我認爲透明區域轉換爲白色的最簡單方法是在白色背景上的圖像粘貼調整前:

use Image::Magick; 

sub dims { 
    my ($image) = @_; 
    return $image->Get('width') . 'x' . $image->Get('height'); 
} 

# First grab the image to be mangled. 
my $image = Image::Magick->new(); 
$image->Read('input.png'); 

# Then, create a white image with the same size. 
my $bg = Image::Magick->new(size => dims($image)); 
$bg->Read('xc:#ffffff'); 

# And overlay the original on top of it to fill the transparent pixels 
# with white. 
$bg->Composite(compose => 'Over', image => $image); 

# Finally, continue on as normal using $bg instead of $image. 
$bg->Resize(geometry => '500x'); 
$bg->Write('output.jpg'); 

我測試了這個與Graphics::Magick(ImageMagick的一個更快的叉),但它應該與Image::Magick一樣工作。

我曾嘗試在過去做過類似的圖像篡改,上面是我能想到的最好的圖像。