2010-11-10 6 views
5

Więc mam PNG i obrócić go, ale pojawia się czarne tło .. czy zrobić kod koloru ofr biały dostaję białej .. Próbowałem to zrobić ..Jak uzyskać przezroczyste tło po rotacji obrazu png za pomocą php?

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

Próbowałem również ..

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

Czy ktoś może mi pomóc?

Oto mój kod. Jeśli zmienię allocatealpha na 0, 0, 255, 0, to zmieni się na niebieski. ale z 0, 0, 0, 127 jest nadal czarny.

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

+0

Czy w oryginalnym kodzie używany jest obrazek "image" zamiast "$ image"? – MiffTheFox

+0

tak, oryginalny kod używa $ image – Chris

Odpowiedz

0

Czy próbowałeś tego?

imagecolortransparent

nadzieję, że zrozumiał swoje pytanie!

+0

Dziękujemy! w końcu zadziałało! – Chris

+0

@ Świetnie słyszeć !! Pamiętaj, aby sprawdzić jedną odpowiedź jako poprawną! (Doest musi być mój, ale ten, który najbardziej ci pomógł) – Trufa

+0

Tak, okazało się, że tak naprawdę nie działa. To było tylko białe tło, więc wyglądało tak, więc wciąż szukam odpowiedzi. Dzięki za pokazanie mi tej funkcji! – Chris

0
 // 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

Próbowałem to wcześniej i nie działało z jakiegoś powodu – Chris

+0

Ok, więc kłamałem, że imagecolortransparent nie działa to tylko tak wyglądało z powodu białego tła .. Próbowałem w ten sposób ponownie i wiem, że to działa, ponieważ mogę zmienić tło, aby niebieski i czerwony itp. itd., ale gdy robię bałagan z kanałem alfa, wszystko to czyni go przezroczystym dla czerni .. na przykład, jeśli mam alokację w ten sposób .. 0, 0, 255, 75 po prostu robi ciemniejszy odcień niebieskiego jako jeśli sprawia, że ​​niebieski jest przezroczysty, ale za nim jest czarny kolor – Chris

9
$destimg = imagecreatefromjpeg("image.png"); 
$transColor = imagecolorallocatealpha($destimg, 255, 255, 255, 127); 
$rotatedImage = imagerotate($destimg, 200, $transColor); 
imagesavealpha($rotatedImage, true); 
imagepng($rotatedImage,"rotated.png"); 
+0

Świetna odpowiedź ... działa idealnie :-) – abhis

+2

"imagecreatefromjpeg (" image.png ")" powinno być "imagecreatefrompng (" image.png ")" –

0
$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

To co używam, to doskonale do plików .png z przezroczystym tłem. Piątki!

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'); 

}