Как избежать черного фона при повороте изображения на 45 градусов с помощью PHP? - PullRequest
4 голосов
/ 10 июня 2010

Привет! Мне нужно перевернуть уменьшенное изображение, прежде чем объединить его с другим файлом JPEG. но когда я поворачиваю на 45 градусов, используя php. Это показывает черный фон. как я могу избежать этого. мне может помочь любое тело.

Ответы [ 2 ]

3 голосов
/ 10 июня 2010

Что ж, если вы генерируете jpg, с помощью PHP GD вы устанавливаете цвет фона в качестве третьего параметра функции imagerotate.В этом примере я предполагаю, что вы поворачиваете изображение jpg $filename на произвольные $angle градуса, и вам нужен белый фон, то есть цветовой код 16777215:

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

blackэто код цвета 0, который используется по умолчанию, а остальная цветовая гамма находится между ними, так что вам просто нужно решить, какой цвет фона вы бы хотели

РЕДАКТИРОВАТЬ: для прозрачного фона, если выгенерируют png, который вы бы сделали:

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

Надеюсь, это поможет

1 голос
/ 17 июня 2010
<?
$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);
?>

Кроме того, у ваших изображений водяных знаков есть альфа-канал или они полностью непрозрачны?

...