Как получить прозрачный фон после поворота png изображения с помощью php? - PullRequest
6 голосов
/ 10 ноября 2010

Итак, у меня есть изображение PNG, и я поворачиваю его, но получаю черный фон ... или, если я делаю цветовой код белого или белого, я получаю белый .. Я пытался сделать это ..

$trans = imagecolorallocatealpha(image, 0, 0, 0, 127);
imagerotate($image, $degree, $trans)

я тоже пробовал ..

$trans = imagecolorallocatealpha($image, 255, 255, 255, 127);

Может ли кто-нибудь мне помочь?

вот мой код .. если я изменю allocatealpha на 0, 0, 255, 0, то он станет синим. но с 0, 0, 0, 127 он все еще черный.

function rotate($degrees) { <br/> $image = $this->image;<br/> imagealphablending($image, false);<br/> $color = imagecolorallocatealpha($image, 0, 0, 0, 127);<br/> imagefill($this->image, 0, 0, $color);<br/> $rotate = imagerotate($image, $degrees, $color);<br/> imagesavealpha($image, TRUE);<br/> $this->image = $rotate;

Ответы [ 7 ]

10 голосов
/ 03 июня 2011
$destimg = imagecreatefromjpeg("image.png");
$transColor = imagecolorallocatealpha($destimg, 255, 255, 255, 127);
$rotatedImage = imagerotate($destimg, 200, $transColor);
imagesavealpha($rotatedImage, true);
imagepng($rotatedImage,"rotated.png");
2 голосов
/ 10 ноября 2010

Убедитесь, что для imagesavealpha установлено значение ИСТИНА, чтобы сохранить прозрачность.http://www.php.net/manual/en/function.imagesavealpha.php

imagesavealpha($image, TRUE);

0 голосов
/ 22 октября 2014

Это то, что я использую, это прекрасно работает для файлов .png с прозрачным фоном. Высокие пятерки!

function rotate($degrees) {

    // Switch from default counter-clockwise to clockwise
    $degrees = 360 - $degrees; 

    // Get the image 
    $source =  imagecreatefrompng("images/image.png");

    // Rotate the image
    $rotated_image = imagerotate($source, $degrees, imageColorAllocateAlpha($source, 0, 0, 0, 127));

    // Save the rotated image
    imagepng($rotated_image, 'images/rotated_image.png');

}
0 голосов
/ 05 октября 2014
    $info = pathinfo($pathToImage);
    $name = str_replace("." . $info['extension'], "", $info['basename']);

    $size = getimagesize($pathToImage);



    $type = isset($size['type']) ? $size['type'] : $size[2];

    // Check support of file type
    if (!(imagetypes() & $type)) {
        // Server does not support file type
        return false;
    }

    $source = self::imageCreateFrom($pathToImage, trim($info['extension'])) or notfound();
    $transColor = imagecolorallocatealpha($source, 255, 255, 255, 127);

    // $transparency = imagecolorallocatealpha($source, 0, 0, 0, 127);
    $rotate = imagerotate($source, 360 - $rotate_angle, $transColor);
    //imagealphablending($rotate, false);


    imagesavealpha($rotate, TRUE);
    //imagejpeg($rotate,$pathToThumbs.DIRECTORY_SEPARATOR.$info['basename']);
    self::createImage($rotate, $pathToThumbs, $info['basename'], trim($info['extension']));

    // imagejpeg($rotate);
    imagedestroy($source);
    imagedestroy($rotate);
0 голосов
/ 11 ноября 2010

Вы можете попробовать это: http://www.exorithm.com/algorithm/view/rotate_image_alpha

0 голосов
/ 10 ноября 2010
        // Turn off transparency blending (temporarily)
        imagealphablending($image, false);

        // Create a new transparent color for image
        $color = imagecolorallocatealpha($image, 0, 0, 0, 127);

        // Completely fill the background of the new image with allocated color.
        imagefill($image, 0, 0, $color);

        // Restore transparency blending
        imagesavealpha($image, true);
0 голосов
/ 10 ноября 2010

Вы пробовали это?

imagecolortransparent

Надеюсь, я понял ваш вопрос!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...