PHP删除一段图像,留下透明空间

时间:2016-06-04 08:30:28

标签: php

我有一个透明的图像,中间有一个条形... http://i66.tinypic.com/2zyeg4h.png

使用php我想删除栏上的中间部分,在栏的中间留下一个透明空间。我试试这个代码......     

$im = imagecreatefrompng('****root****/image.png');
//make a yellow box
$transparent = imagecolorallocate($im, 255, 255, 0);
//make the yellow box transparent
imagecolortransparent($im, $transparent);
imagefilledrectangle($im, 200, 115, 300, 137, $transparent);

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

header ('Content-Type: image/png');

imagepng($im);

$save = "****root****/test.png";
imagepng($im, $save);
imagedestroy($im);
?>

但输出图像的矩形保留黄色,而不是将其透明。

http://i67.tinypic.com/1ny6j4.png

我哪里错了?如果我删除......

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

我在中心(在浏览器中)获得透明框,但图像的其余部分失去了透明度并且具有白色背景,当我下载该图像并在照片编辑器中打开时,透明框也在中心不见了。我在我的服务器上设置了GD库。

1 个答案:

答案 0 :(得分:1)

您需要使用gd函数imagecolorallocatealpha来创建透明色。

您可以使用PHP生成整个图像。

e.g。

<?php
// generate empty image
$image = imagecreate(500, 262);

// define black
$black = imagecolorallocate($image, 0, 0, 0);

// create left part of the bar
imagefilledrectangle($image, 0, 110, 200, 162, $black);

// create right part of the bar
imagefilledrectangle($image, 300, 110, 500, 162, $black);

// save image
imagepng($image, 'outimage.png');

outimage.png

如果您想坚持使用现有图像

<?php
// generate empty image
$image = imagecreatefrompng('input.png');

// define transparent
$transparent = imagecolorallocatealpha($image, 255, 255, 255, 127);

// create the transparent area
imagefilledrectangle($image, 200, 110, 300, 162, $transparent);

// save image
imagepng($image, 'output.png');

input.png

input.png

output.png

output.png

如果您未将图片作为结果提交给浏览器,则无需发送标题。

e.g。

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

会在请求的浏览器中显示图像,而不是将其保存到文件中。