pngの後ろにjpegを配置しようとしています。PHPアルファ透明度を持つpngの上にjpegをマージする
前景画像はこちら: http://peugeot208.srv.good-morning.no/images/marker-shadow.png
の背後にある画像は、Facebookのプロフィール画像です - 通常、このように: https://graph.facebook.com/100000515495823/picture
結果画像は、透明性を失い、代わりに黒です: http://peugeot208.srv.good-morning.no/libraries/cache/test.png
これは私が使用するコードです:
// combine image with shadow
$newCanvas = imagecreatetruecolor(90,135);
$shadow = imagecreatefrompng("marker-shadow.png");
//imagealphablending($newCanvas, false);
imagesavealpha($newCanvas, true);
imagecopy($newCanvas, $canvas, 20, 23, 0, 0, 50, 50);
imagecopy($newCanvas, $shadow, 0, 0, 0, 0, 90, 135);
imagepng($newCanvas, $tempfile, floor($quality * 0.09));
imagealphablending($ newCanvas、false)を有効にすると、結果は正しい(マーカーの中央の穴は透明ですが)後ろの画像はなくなります。
あなたはこれに光を当てることができますか? :-)
ありがとう!
編集:実測ソリューション
私はいくつかのあいをして、このコードになってしまった - 透過PNGである - 起源はcreateimagetruecolorが、テンプレートから作成した画像ではありません。
これはうまくいきました。結果は適切に透明です。私はなぜそれが本当にわからない。なぜアイディアがあるの?
fbimage.php
// Create markerIcon
$src = $_REQUEST['fbid'];
$base_image = imagecreatefrompng("../images/marker-template.png");
$photo = imagecreatefromjpeg("https://graph.facebook.com/".$src."/picture");
$top_image = imagecreatefrompng("../images/marker-shadow.png");
imagesavealpha($base_image, true);
imagealphablending($base_image, true);
imagecopy($base_image, $photo, 20, 23, 0, 0, 50, 50);
imagecopy($base_image, $top_image, 0, 0, 0, 0, 90, 135);
imagepng($base_image, "./cache/".$src.".png");
?>
<img src="./cache/<?php echo $src ?>.png" />
更新:あなたがここに結果を見つけることができます次のコード を確認してください:http://peugeot208.srv.good-morning.no/images/marker.php を見てわかるように、背景がまだ黒です。
// create base image
$base_image = imagecreatetruecolor(90,135);
$photo = imagecreatefromjpeg("marker-original.jpg");
$top_image = imagecreatefrompng("marker-shadow.png");
imagesavealpha($top_image, true);
imagealphablending($top_image, true);
imagesavealpha($base_image, true);
imagealphablending($base_image, true);
// merge images
imagecopy($base_image, $photo, 20, 23, 0, 0, 50, 50);
imagecopy($base_image, $top_image, 0, 0, 0, 0, 90, 135);
// return file
header('Content-Type: image/png');
imagepng($base_image);
$ canvasイメージでもアルファベットを有効にしていることを確認してください。 –
Halfer。私は皮肉に見えることを意味しませんでした:-)私は以前の質問でいくつかの方向性が必要です。私は合計で6つの質問をしました。 1つは答えられなかった。削除されました。この質問に答えてください:806133.最も合理的な答えは私のものですが、それは回避策です。私自身の答えを受け入れるべきですか?または他の誰かが十分な答えではありませんか? – nitech