Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> funkcja imagecopymerge niszczy kanał alpha pliku png
likemandrake
post
Post #1





Grupa: Zarejestrowani
Postów: 175
Pomógł: 17
Dołączył: 23.06.2006

Ostrzeżenie: (0%)
-----


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....

Ten post edytował likemandrake 23.11.2007, 22:26:41
Go to the top of the page
+Quote Post
ayeo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Blodo
post
Post #3





Grupa: Zarejestrowani
Postów: 51
Pomógł: 1
Dołączył: 1.02.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
krakiewicz.pl
post
Post #4





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 20.12.2012
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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


Ten post edytował krakiewicz.pl 6.06.2013, 16:01:54
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.09.2025 - 16:39