php gif 透明背景,在php中生成透明的GIF图像

我有一个PHP脚本,可以动态生成较大图像的缩略图,而不必将其存储在Web服务器上。问题是,当图像是透明的GIF图像时,生成的缩略图不透明。它可以正确生成用于透明PNG格式图像的透明缩略图。唯一的问题是GIF图像的透明度。

这是脚本:

//ex . thumb.php?p=pp.png&q=4&w=60

if(!isset($_GET['p'])){exit;}

if(!isset($_GET['h']) && !isset($_GET['w'])){

list($w,$h,$type,$attr) = getimagesize($_GET['p']);

$_GET['w'] = $w;

$_GET['h'] = $h;

}else if(!isset($_GET['w'])){

$_GET['w'] = 0;

}else if(!isset($_GET['h'])){

$_GET['h'] = 0;

}

if(!isset($_GET['q'])){$_GET['q'] = 100;}

$info = pathinfo($_GET['p']);

switch($info['extension']){

case 'gif' : $t = 1; break;

case 'jpg' : $t = 2; break;

case 'png' : $t = 3; break;

}

if($t==1){

header("Content-Type: image/gif");

$img = imagecreatefromgif($_GET['p']);

}else if($t==2){

header("Content-Type: image/jpg");

$img = imagecreatefromjpeg($_GET['p']);

}else if($t==3){

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

$img = imagecreatefrompng($_GET['p']);

}else{

exit;

}

$orSize = orSize($img);

$th = thSize($orSize,$_GET['w'],$_GET['h']);

$tmp_img = imagecreatetruecolor( $th['w'],$th['h'] );

//if image is GIF or PNG format, produce transparent images

if ($t==1 || $t==3) {

imagealphablending($tmp_img, false);

imagesavealpha($tmp_img, true);

if ($t==3)

{

$source = imagecreatefrompng($_GET['p']);

}

else {

$source = imagecreatefromgif($_GET['p']);

}

imagealphablending($source, true);

imagecopyresampled($tmp_img, $source, 0, 0, 0, 0, $th['w'], $th['h'], $orSize['w'], $orSize['h'] );

}else{

imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $th['w'], $th['h'], $orSize['w'], $orSize['h'] );

}

if(isset($_GET['s'])){

//S VAR OUTPUTS IT AS DIFFERENT FORMAT

$t = $_GET['s'];

}

if(!isset($_GET['save'])){

//SAVE VAR NEEDS TO BE THE PATH TO SAVE TO AND FILENAME

$_GET['save'] = null;

}

if($t==1){

imagegif($tmp_img,$_GET['save'],$_GET['q']);

}else if($t==2){

imagejpeg($tmp_img,$_GET['save'],$_GET['q']);

}else if($t ==3){

$_GET['q'] = 10 - ($_GET['q'] /= 10);

imagepng($tmp_img,$_GET['save'],$_GET['q']);

}

imagedestroy($tmp_img);

function orSize($img){

$orSize['w'] = imagesx($img);

$orSize['h'] = imagesy($img);

return $orSize;

}

function thSize($orSize,$w,$h){

$th = Array();

if($w!=0 && $h == 0){

$th['w'] = $w;

$th['h'] = floor( $orSize['h'] * ( $w / $orSize['w'] ) );

}else if($w==0 && $h != 0){

$th['h'] = $h;

$th['w'] = floor( $orSize['w'] * ( $h / $orSize['h'] ) );

}else{

$th['w'] = $w; $th['h'] = $h;

}

return $th;

}

?>脚本就像这样工作,生成缩略图只需传递图像名称如下:

thumb.php?p=image.png&q=4&w=60我怎样才能让这个脚本生成GIF透明图像的透明缩略图图像?

生成透明图像的线如下所示:

// if $t is gif or png image

if ($t==1 || $t==3) {

imagealphablending($tmp_img, false);

imagesavealpha($tmp_img, true);

if ($t==3)

{

$source = imagecreatefrompng($_GET['p']);

}

else {

$source = imagecreatefromgif($_GET['p']);

}

imagealphablending($source, true);

imagecopyresampled($tmp_img, $source, 0, 0, 0, 0, $th['w'], $th['h'], $orSize['w'], $orSize['h'] );

}else{

imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $th['w'], $th['h'], $orSize['w'], $orSize['h'] );

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值