likemandrake
23.11.2007, 22:16:37
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
24.11.2007, 00:31:46
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
Blodo
24.11.2007, 00:41:36
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#71765Czasami komenty na php.net sie przydaja.
krakiewicz.pl
6.06.2013, 15:58:46
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:
$img1 = new Imagick( 'ico_png.png' ); // tworzenie obiektu Imagick
$img2 = new Imagick( 'magician.png' ); // tworzenie obiektu Imagick
$img1->compositeImage( $img2, imagick::COMPOSITE_DEFAULT, 0, 0 ); // nakładanie jednego obrazu na drugi z możliwością konfiguracji komponowania warstw
$img1->setImageBackgroundColor('white'); // ustawienie koloru tła
$img_wynik = $img1->flattenImages(); // spłaszczenie łączonych plików w jedną warstwę
$img_wynik->setImageFormat('jpg'); // konwertowanie do formatu JPG
$img_wynik->writeImage( 'png_imagemagick.jpg' ); // zapis do pliku
header('Content-type: image/jpeg'); // nagłówek dla wyświetlenia w przeglądarce
echo $img_wynik; // wyświetlenie obrazu