0

そこで、PHP Doc と SO に関するいくつかの役立つスレッド/アドバイスからスクリプトを作成し、これを作成しました。

$filename = time();

$glassurl = $_GET['GlassImg'];
$frameurl = $_GET['FrameImg'];
$handleurl = "images/helpbutton.png";
$handleurl2 = "images/helpbutton.png";

$glassimg = imagecreatefromjpeg($glassurl);
$frameimg = imagecreatefromgif($frameurl);
$handleimg = imagecreatefrompng($handleurl);
$handleimg2 = imagecreatefrompng($handleurl2);

$frame_x = imagesx($frameimg);
$frame_y = imagesy($frameimg);
imagecopymerge($glassimg, $frameimg, 0, 0, 0, 0, $frame_x, $frame_y, 100);

imagecolortransparent($handleimg, imagecolorat($handleimg, 0, 0));
imagecolortransparent($handleimg2, imagecolorat($handleimg2, 0, 0));

$handle_x = imagesx($handleimg);
$handle_y = imagesy($handleimg);
imagecopymerge($glassimg, $handleimg, 460, 150, 0, 0, $handle_x, $handle_y, 100);


$handle2_x = imagesx($handleimg2);
$handle2_y = imagesy($handleimg2);
imagecopymerge($glassimg, $handleimg2, 5, 5, 0, 0, $handle2_x, $handle2_y, 100);

// Output and free from memory
imagepng($glassimg, "uploads/$filename.png");

imagedestroy($glassimg);
imagedestroy($frameimg);
imagedestroy($handleimg);
imagedestroy($handleimg2);

ほぼ完璧に機能しますが、わずかな問題があります。画像を配置してマージできることを確認するための単なるプレースホルダー画像であるhelpbutton.pngは、画像がひどく見える原因となる黒一色のドロップシャドウになります。

これは次のようになります。

helpbutton.png

これは、マージされると次のようになります。

helpresult.png

ブレンディングなどを含む多くの画像コントロールを調べましたが、影響を与えるものはないようです。PHPでドロップシャドウを暗くしないように制御する方法を知っている人はいますか?

4

1 に答える 1

0

imagesavealpha($res, true)imagealphablending($res, false)は、アルファチャネルを使用してpng画像を保存する場合(特に、jpegから開いた場合)に便利です。

編集:これを試してください:

$glassimg = imagecreatefromjpeg($glassurl);
imagealphablending($glassimg, false);
imagesavealpha($glassimg, true)

$frameimg = imagecreatefromgif($frameurl);
imagealphablending($frameimg, false);
imagesavealpha($frameimg, true)

$handleimg = imagecreatefrompng($handleurl);
imagealphablending($handleimg, false);
imagesavealpha($handleimg, true)

$handleimg2 = imagecreatefrompng($handleurl2);
imagealphablending($handleimg2, false);
imagesavealpha($handleimg2, true)
于 2012-10-22T12:48:16.167 に答える