Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: funkcja imagecopymerge niszczy kanał alpha pliku png
Forum PHP.pl > Forum > PHP
likemandrake
Witam

Problem jak w temacie... Chce nałożyć obrazek w formacie PNG z kanałem alpha na inny obrazek wykorzystując funkcję imagecopymerge, z ustawionym poziomem przezroczystości... problem polega na tym, że funkcja ta niszczy kanał alpha obrazka png i w rezultacie obrazek ten zachowuje sie, jakby mial normalne tlo... owszem, gdy nalozy sie go na inny obrazek ma on zadany poziom przezroczystosci

Jak taki problem rozwiazac?

EDIT:

problem rozwiazalem w nastepujacy sposob:

$imgdest - obrazek docelowy
$imgsrc - obrazek zrodlowy png z kanalem alpha
$imgtmp - obrazek tymczasowy - wymagany do poprawnego kopiowania

zalozmy, ze wszystkie obrazki maja ten sam staly rozmiar 300x200px

wykonuje takie polecenia:

imagecopyresampled($imgtmp, $imgdest, 0, 0, 0, 0, 300, 200, 300, 200);
imagecopyresampled($imgtmp, $imgsrc, 0, 0, 0, 0, 300, 200, 300, 200);
imagecopymerge($imgdest, $imgtmp, 0, 0, 0, 0, 300, 200, 50);

Czy da sie to rozwiazac w inny sposob? Tj mam na mysli inna funkcja, czy taka istnieje, bo funkcja imagecopymerge nie rozwiaze sie tego w inny sposob....
ayeo
Nie jestem pewien jak to jest z kanałem alpha w png, ale w gifach "kolor przezroczysty" to poprostu jakikolwiek kolor (np czarny). Poprostu ustawiasz index koloru, który ma być traktowany jako przezroczysty. Poczytaj o funkcjach:
imagecolorallocatealpha();
imagecolortransparent();
Nie wiem czy to coś pomoże smile.gif
Blodo
Mialem ten sam problem. Jak ten drugi obrazek to rowniez nie bedzie png, to po kanale alpha. Probowalem na rozne sposoby z imagecopymerge kombinowac, imagesavealpha, imagealphablending itd, nic to nie dalo. Trzeba to w inny sposob obejsc:

http://uk.php.net/manual/en/function.image...nding.php#71765

Czasami komenty na php.net sie przydaja.
krakiewicz.pl
Polecam API do ImageMagick.
Zbadaj sprawę z ImageMagick, jest bardziej rozbudowane niż GD:

Opisałem u siebie na blogu jak łączyć warstwy PNG z przezroczystością.
Tu fragment:
  1. $img1 = new Imagick( 'ico_png.png' ); // tworzenie obiektu Imagick
  2. $img2 = new Imagick( 'magician.png' ); // tworzenie obiektu Imagick
  3.  
  4. $img1->compositeImage( $img2, imagick::COMPOSITE_DEFAULT, 0, 0 ); // nakładanie jednego obrazu na drugi z możliwością konfiguracji komponowania warstw
  5.  
  6. $img1->setImageBackgroundColor('white'); // ustawienie koloru tła
  7.  
  8. $img_wynik = $img1->flattenImages(); // spłaszczenie łączonych plików w jedną warstwę
  9.  
  10. $img_wynik->setImageFormat('jpg'); // konwertowanie do formatu JPG
  11.  
  12. $img_wynik->writeImage( 'png_imagemagick.jpg' ); // zapis do pliku
  13.  
  14. header('Content-type: image/jpeg'); // nagłówek dla wyświetlenia w przeglądarce
  15.  
  16. echo $img_wynik; // wyświetlenie obrazu
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.