使用PHP将图像旋转45度时如何避免黑色背景?

使用PHP将图像旋转45度时如何避免黑色背景?,php,gd,Php,Gd,嗨,我必须先翻转一个图钉图像,然后再将其与另一个jpeg文件合并。但当我用php旋转45度时。它显示黑色背景。我怎样才能避免这种情况。任何人都可以帮助我。好吧,如果你正在生成一个jpg,使用PHP GD,你可以将背景颜色设置为函数imagerotate的第三个选项。在本例中,我假设您正在将jpg图像旋转任意角度,并且您想要白色背景,即颜色代码16777215: $rotatedImage = imagerotate(imagecreatefromjpeg($filename), ((360-$a

嗨,我必须先翻转一个图钉图像,然后再将其与另一个jpeg文件合并。但当我用php旋转45度时。它显示黑色背景。我怎样才能避免这种情况。任何人都可以帮助我。

好吧,如果你正在生成一个jpg,使用PHP GD,你可以将背景颜色设置为函数
imagerotate
的第三个选项。在本例中,我假设您正在将jpg图像旋转任意角度,并且您想要白色背景,即颜色代码16777215:

$rotatedImage = imagerotate(imagecreatefromjpeg($filename), ((360-$angle)%360), 16777215);
黑色是颜色代码
0
,这是默认值,其余的gamma颜色介于两者之间,因此您只需决定想要哪种背景色

编辑: 对于透明背景,如果要生成png,请执行以下操作:

$destimg = imagecreatefromjpeg($filename);
$transColor = imagecolorallocatealpha($destimg, 255, 255, 255, 127);
$rotatedImage = imagerotate($destimg, ((360-$angle)%360), $transColor);
希望对您有所帮助


<?
$image = "130.jpg";
$degrees = 25;
for($i=0;$i<count($data);$i++){
    $ext = "";
    $extarr = "";
    $extarr = explode(".", $data[$i]['name']);
    $ext = array_pop($extarr);
    if($ext == "png"){
        $rotate = imagecreatefrompng("images/".$data[$i]['name']);
        $transColor = imagecolorallocatealpha($rotate, 255, 255, 255, 270);
        $watermark1[$i] = imagerotate($rotate, ((360-$degrees)%360), $transColor);
    }
}

function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $opct){
    $w = imagesx($src_im);
    $h = imagesy($src_im);
    $cut = imagecreatetruecolor($src_w, $src_h);
    imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);
    imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);
    imagecopymerge($dst_im, $cut, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, (100 - $opct));
}


for($i=0; $i<count($watermark1); $i++){
    if($i == 0) imagecopymerge_alpha($image, $watermark1[$i], $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $opacity);
    else imagecopymerge_alpha($image, $watermark1[$i], ($i*$dest_x)*3, ($i*$dest_y)*15, 0, 0, $watermark_width, $watermark_height, $opacity);
    imagedestroy($watermark1[$i]);
}
header("content-type: image/png");
imagepng($image);
imagedestroy($image);
?>

另外,您的水印图像是否具有alpha通道或完全不透明?

我认为您不能。背景必须设置为颜色,因为JPEG图像不支持透明背景。所以如果你旋转到某个奇怪的角度,它必须用某种颜色填充其他像素。我只是放弃使用PHPGD,因为它做了太多随机的事情,我永远无法让任何东西正常工作。基本上就是一团糟。嗨,先生,对不起,现在我编辑了这个问题。如果我把它旋转90度,180度等等,它是k,但我需要旋转25度或40度。但在那个时候,它显示了这一点ground@learner:如果旋转90、180等,图像仍将包含在同一“边界框”中。如果旋转45度,GD将不知道在角点像素中放置什么,因为原始图像中没有任何内容。如何使其透明。如果我给-1,它也会显示白色背景。@learner:就像我说的,你不能。JPEG图像不支持透明背景。上载JPEG文件时,是否可以将其更改为gif格式。您还有其他建议吗。@学习者:animuson是正确的,因为如果生成的图像是jpeg,则不能使用透明颜色,但是如果您希望生成png(文件大小较大),则我建议您查看此页面,你可以从页面底部的用户评论中获得想法,我知道你在做什么。尽管它看起来应该可以工作,但不能只执行imagecopymerge,因为它不能正确处理png戳记的透明度。不久前我做了一个项目,在那里我不得不专门为此使用一些变通方法。我明天早上上班的时候会查一下,然后把代码贴在这里。