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

时间:2010-06-10 06:14:46

标签: php gd

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

2 个答案:

答案 0 :(得分:3)

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

$rotatedImage = imagerotate(imagecreatefromjpeg($filename), ((360-$angle)%360), 16777215);

黑色是颜色代码0,这是默认值,其余的颜色伽玛位于两者之间,所以你只需要决定你想要的背景颜色

编辑: 对于透明背景,如果你要生成一个png,你会这样做:

$destimg = imagecreatefromjpeg($filename);
$transColor = imagecolorallocatealpha($destimg, 255, 255, 255, 127);
$rotatedImage = imagerotate($destimg, ((360-$angle)%360), $transColor);

希望有所帮助

答案 1 :(得分:1)

<?
$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通道或者它们是否完全不透明?