2011-12-23 5 views
1

Google Maps Static APIから保存した画像のポリゴン(透明領域がある部分)をトリミングします。 次に、2枚目の画像を作成して保存し、同じスクリプトを試しましたが、2枚目の画像で効果は変わりませんでしたが、同じ画像です。たぶんPHPのバグ? PHP 5.3.3を使用しています。PHP GD:ポリゴンをトリミングする:一部の画像で動作するものがあります。

<?php 
$image = imagecreatefrompng('map.png'); 
$image2 = imagecreatefrompng('map2.png'); 


$black = imagecolorallocatealpha($image, 0, 0, 0, 127); 
$black2 = imagecolorallocatealpha($image2, 0, 0, 0, 127); 


imagefilledpolygon($image, array(0,0, 20,20, 0,20), 3, $black); 
imagefilledpolygon($image2, array(0,0, 20,20, 0,20), 3, $black2); 

header('Content-Type: image/png'); 
imagepng($image); 
#imagepng($image2); 
?> 

画像1: 1

画像2: 2

+0

:値0は完全に不透明、127は完全に透明であることを示します。だからあなたは完全に透明なポリゴンを描いていて、それを見ているのですか?意図したとおりに動作しているように思えます。 –

+0

このポリゴンを透明に置き換える必要があります。最初の例も正しく動作します。最初のイメージの作業結果は次のとおりです。http://i.imgur.com/91Ska.png – Poru

+1

透明なポリゴンで描画すると、描画している領域が置き換えられることはありませんが、アルファ値に従って、ポリゴンの色で下の画像を合成します。上で書いたコードで単色が表示されている場合は、ブレンディングがオンになっていないイメージを書き込んでいると推測します。 'imagealphablending($ image、TRUE)'と 'imagealphablending($ image2、TRUE)'を呼び出すと、同じ結果が得られるはずです。 –

答えて

0

は私が解決策を見つけた:あなたが働いて、この透明性を得るために、画像のための imagesavealpha設定をimagealphablending設定する必要があります。これらの画像は異なるビットを有するという問題もある。作業イメージは8ビットで、作業していないイメージは24ビットでした。

imagealphablending($image2, false); 
imagesavealpha($image2, true); 

このコメントはずっと私を助け:http://www.php.net/manual/en/function.imagecreatefrompng.php#47083 [マニュアル](http://www.php.net/manual/en/function.imagecolorallocatealpha.php)「*アルファ*から

関連する問題