2011-02-11 11 views
1

Image MagickのPerlモジュールであるPerl Magickを使用して、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"); 

も:

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と同じように動作するはずである。

私はこれまで同様のイメージマングリングを試みてきましたが、上記は最高のものでした。

関連する問題