如何使用 GD 使用 PHP 创建透明背景?

Posted

技术标签:

【中文标题】如何使用 GD 使用 PHP 创建透明背景?【英文标题】:How to create transparent background with PHP using GD? 【发布时间】:2011-11-09 16:01:43 【问题描述】:

我制作了一张结合了 3 张不同图像的图像,但我需要一个透明背景,但我没有成功。这是我的最终代码:

<?php

$meko = $_GET['image'];
$im = $meko;
$bookback = "images/book_back.png";
$mekoCanvas = imagecreatetruecolor(115, 135);
$canvas = imagecreatetruecolor(115, 185);

$bookback = imagecreatefrompng($bookback);
$meko = imagecreatefromjpeg($meko);

imagecopy($mekoCanvas, $meko, 0, 0, 0, 0, 100, 135);
imagecopy($mekoCanvas, $bookback, 100, 0, 0, 0, 15, 135);

$im = $mekoCanvas;
$rH = 50; // Reflection height
$tr = 30; // Starting transparency
$div = 1; // Size of the divider line
$w = 115;
$h = 135;
//$im = imagecreatefromjpeg($im);
$li = imagecreatetruecolor($w, 1);
$bgc = imagecolorallocate($li, 255, 255, 255); // Background color
imagefilledrectangle($li, 0, 0, $w, 1, $bgc);
$bg = imagecreatetruecolor($w, $rH);
$wh = imagecolorallocate($im,255,255,255);

$im = imagerotate($im, -180, $wh);
imagecopyresampled($bg, $im, 0, 0, 0, 0, $w, $h, $w, $h);
$im = $bg;
$bg = imagecreatetruecolor($w, $rH);
for ($x = 0; $x < $w; $x++) 
    imagecopy($bg, $im, $x, 0, $w-$x, 0, 1, $rH);

$im = $bg;

$in = 100/$rH;
for($i=0; $i<=$rH; $i++)
    if($tr>100) $tr = 100;
    imagecopymerge($im, $li, 0, $i, 0, 0, $w, 1, $tr);
    $tr+=$in;

imagecopymerge($im, $li, 0, 0, 0, 0, $w, $div, 100); // Divider
header('content-type: image/jpeg');

imagecopy($canvas, $mekoCanvas, 0, 0, 0, 0, 115, 135);
imagecopy($canvas, $im, 0, 135, 0, 0, 115, 50);

imagejpeg($canvas);

imagedestroy($im);
imagedestroy($li);

?>

结果是: click here

【问题讨论】:

jpeg 不支持透明度。您需要将图像输出为 gif 或 png。 代码的哪一部分尝试设置透明度? 【参考方案1】:

您没有告诉 GD 在您的任何代码中使用 alpha。这是通过imagesavealphaimagealphablending 等完成的......

【讨论】:

【参考方案2】:

尝试使用

imagecolortransparent($im);

http://www.php.net/manual/en/function.imagecolortransparent.php

【讨论】:

以上是关于如何使用 GD 使用 PHP 创建透明背景?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中使用 GD 设置透明背景?

如何使用 Perl 和 GD 创建透明的真彩色 PNG?

使用gd在php中调整图像大小后的黑色背景

如何使用 PHP 使动画 gif 的背景透明?

在 PHP 中更改图像的不透明度

如何使用GD检查图像是不是具有透明度?