imagecreatefrompng()使背景变成黑色而不是透明?

我使用PHP和GD库制作缩略图,但是我的代码将png透明度变成了纯黑色,是否有解决方案来改进我的代码?

这是我的PHP缩略图制作者代码:

function cropImage($nw, $nh, $source, $stype, $dest) {

$size = getimagesize($source);

$w = $size[0];

$h = $size[1];

switch($stype) {

case 'gif':

$simg = imagecreatefromgif($source);

break;

case 'jpg':

$simg = imagecreatefromjpeg($source);

break;

case 'png':

$simg = imagecreatefrompng($source);

break;

}

$dimg = imagecreatetruecolor($nw, $nh);

$wm = $w/$nw;

$hm = $h/$nh;

$h_height = $nh/2;

$w_height = $nw/2;

if($w> $h) {

$adjusted_width = $w / $hm;

$half_width = $adjusted_width / 2;

$int_width = $half_width - $w_height;

imagecopyresampled($dimg,$simg,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h);

} elseif(($w <$h) || ($w == $h)) {

$adjusted_height = $h / $wm;

$half_height = $adjusted_height / 2;

$int_height = $half_height - $h_height;

imagecopyresampled($dimg,$simg,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h);

} else {

imagecopyresampled($dimg,$simg,0,0,0,0,$nw,$nh,$w,$h);

}

imagejpeg($dimg,$dest,100);

}

谢谢

回答:

在imagecreatetruecolor()之后:

<?php

// ... Before imagecreatetruecolor()

$dimg = imagecreatetruecolor($width_new, $height_new); // png ?: gif

// start changes

switch ($stype) {

case 'gif':

case 'png':

// integer representation of the color black (rgb: 0,0,0)

$background = imagecolorallocate($dimg , 0, 0, 0);

// removing the black from the placeholder

imagecolortransparent($dimg, $background);

// turning off alpha blending (to ensure alpha channel information

// is preserved, rather than removed (blending with the rest of the

// image in the form of black))

imagealphablending($dimg, false);

// turning on alpha channel information saving (to ensure the full range

// of transparency is preserved)

imagesavealpha($dimg, true);

break;

default:

break;

}

// end changes

$wm = $w/$nw;

$hm = $h/$nh;

// ...

以上是 imagecreatefrompng()使背景变成黑色而不是透明? 的全部内容, 来源链接: utcz.com/qa/408207.html

回到顶部