imagecolortransparent()问题

时间:2014-09-30 22:49:30

标签: php

所以我想要这个结果 http://i.stack.imgur.com/0fTBc.png

但我尝试的所有代码都是这样: http://i.stack.imgur.com/8wVoA.png

任何人都可以帮助我吗?

我的PHP代码:

$im = imagecreatetruecolor(480, 320);
$black = imagecolorallocate($im, 0, 0, 0);
imagecolortransparent($im, $black);
$image = imagecreatefromstring(file_get_contents($new_file));
imagecopymerge($im, $image, 0, 0, 0, 0, 480, 320, 100);

$png_to_merge = "./images/video_top70.png";
$frame = imagecreatefromstring(file_get_contents($png_to_merge));
imagecopy($im, $frame, 0, 0, 0, 0, 480, 320);
$img_final = "./images/top.png";
imagepng($im,$img_final);

1 个答案:

答案 0 :(得分:0)

你的水印' png已经具有透明度,无需选择透明色。 注释行

// $black = imagecolorallocate($im, 0, 0, 0);
// imagecolortransparent($im, $black);

而且,对于未来,选择透明的颜色你要透明:)对于给定的图像,黑色的选择不是明智的 - 使用alpha通道。

结果

enter image description here

裁剪结果

$im = imagecreatetruecolor(480, 320);
$im2 = imagecreatetruecolor(480, 270);

$image = imagecreatefromstring(file_get_contents('img1.png'));
imagecopymerge($im, $image, 0, 25, 0, 0, 480, 320, 100);


$frame = imagecreatefromstring(file_get_contents('img2.png'));
imagecopy($im, $frame, 0, 0, 0, 0, 480, 320);

imagecopyresampled($im2, $im, 0, 0, 0, 25, 480, 270, 480, 270);

header('Content-Type: image/png');
imagepng($im2);
imagedestroy($im2);

我们得到了

enter image description here

好的,这就是你需要的,使用alpha通道

$im = imagecreatetruecolor(480, 320);
$c = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagesavealpha($im, true);
imagefill($im, 0, 0, $c);

imagecopymerge($im, imagecreatefromstring(file_get_contents('img1.png')),
                0, 25, 0, 0, 480, 275, 100);
imagecopy($im, imagecreatefromstring(file_get_contents('img2.png')),
                0, 0, 0, 0, 480, 320);

header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);

结果与第二张图片相同,但高度为320像素。