Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nakładanie grafiki transparentnej
Forum PHP.pl > Forum > PHP
macdavido
Witajcie,
przeszukalem cale forum i od razu na wstepie zaznaczam ze sprobowalem wszystkiego. Niestety za nic nie moge nalozyc, transparentnego pliku PNG (z tonowana przezroczystoscia, tzn. nie tylko jeden kolor jest przezroczysty, inne tez w odpowiednim nasyceniu alpha, poprostu zwykla grafika png-24bit). Zapoznalem sie mocno szczegolowo rowniez z opisami na php.net dotyczacymi biblioteki. Problem chyba mnie przerosl. Tak wiec oto kod:

  1. <?php
  2. header('Content-Type: image/png');
  3.    
  4. // tutaj pobieram plik do zaladowania z dysku na serwer
  5.  
  6. $sourcefile = $_FILES['plik_z_formularza']['tmp_name'];
  7. $destImage = imagecreatefromjpeg( $sourcefile );
  8.  
  9. // pobieram plik maski PNG, bedacy na serwerze strony 'images/maska.png'
  10. // jest to swego rodzaju nadpalona ramka ktora ma zostac nalozona na obrazek
  11.  
  12. $png = imagecreatefrompng( "images/maska.png" );
  13.  
  14. // kiedy plik png nie bedzie mial transparencji tylko, np. splaszczony z bielą - to jesli
  15. // odblokuje linie ponizej. Transparencja dziala ale tylko na jeden kolor, tam gdzie
  16. // juz jest inny oczywiscie nie dziala... tak nie chce, gdyz chodzi o nalozenie pelnego
  17. // tonowanego transparentnie obrazka png-24bit na inny, zwykly jpeg
  18. //
  19. // imagecolortransparent($png, imagecolorallocate($png, 255, 255, 255));
  20.    
  21. // tutaj miksuje obie grafiki (na razie z przesunieciem o 320 pixeli w prawo aby widziec
  22. // w polowie oryginalny podklad i druga polowe po nalozeniu
  23.  
  24. imagecopymerge( $destImage, $png, 320, 0, 0, 0, 640, 320, 100 );
  25.  
  26. // wyswietlam
  27.  
  28. imagepng($destImage);
  29. ?>


Efekt niestety jest taki - jesli nie odblokowac tej jednej linii powyzej - ze serwer miksuje mi grafike PNG z obrazkiem w $destImage w jakis chory sposob. Ta ramka ktora wsrodku ma transparencje zawiera zniszczone zdjecie nie wystepujacewogole na serwerze! Czyli widac ze pobiera PNG z transparencja ale w jakis chory sposob wypelnia ja czymkolwiek (nie wiem skad przy okazji to bierze, naprawde tego zdjecia nie ma tam fizycznie).

Jesli splaszcze PNG i bedzie mial poprostu biel w wiekszej swojej czesci, to po odblokowaniu tej jednej linijki powyzej z funkcja imagecolortransparent, definiuje przezroczystosc dla bieli tego obrazka (zachowanie jak z gifem) wtedy obrazek faktycznie sie naklada i jakos to jest. Niestety nie tak bym chcial bo takie nalozenie na ostro nie wyglada dobrze.

Spedzilem juz kilka godzin wertujac forum, opisy, rozne przyklady i nic sad.gif
juz brak mi pomyslow

Chodzi o prosta rzecz: na obrazek Jpeg ladowany z dysku na serwer chce w locie nalozyc plik PNG-24bit z przezroczystoscia tonowana. Swego rodzaju nadpalona ramka do okoloa. No i tu totalne schodzi

Dzieki wielkie za konstruktywne rady i blagam, juz nie linki do php.net czy cos takiego. Naprawde zapoznalem sie z tym wszystkim i potrzebuje wsparcia z kodem.
maly_swd
// tworzymy pusty obrazek o wymiarach x y
$button=imagecreatetruecolor($x, $y);

// wylaczamy tryb alfa
imagealphablending($button, false);

// ustawiamy kolor alfa
$trans = imagecolorallocatealpha($button, 128, 128, 128,127);

//wypelniamy kolorem alfa
imagefill($button, 0, 0, $trans);

//zapisujemy alfa
imagesavealpha($button, true);
// wlaczamy alfa:)
imagealphablending($button, true);


.....
teraz mozesz dalej wklejac to co chciales

pozdrawiam
macdavido
Serdecznie dziekuje za wsparcie

Powyzsza pomoc zakonczona sukcesem biggrin.gif

Troche to dla mnie bylo dziwne tu wylaczyc potem znowu wlaczyc jakies dziwaczne mieszanie z tym GD. Ale udalo sie.

Teraz doinstaluje FreeType Library i bedzie mozna dopisywac cos wlasna czcionka smile.gif extra!

Dzieki smile.gif
maly_swd
W phpGD chyba da sie pisac TTFami bez istalacji modulu (ale byc moze sie myle).
Wystarczy wgrac plik ttf na server podac lokalizacje:
$font = realpath("/www/htdocs/xxxxxl/ttf/verdanab.ttf");

imagettftext($button, 8, 0, 10, 14-(20-$y)/2, $textColor , $font, $text); /*textsize 8*/

podane wartosci to moje od systemu do generowania buttona;)
macdavido
Cytat(maly_swd @ 20.02.2009, 22:32:49 ) *
W phpGD chyba da sie pisac TTFami bez istalacji modulu (ale byc moze sie myle).


Biblioteka ta jest wymagana, manual rowniez o tym mowi.
Byc moze masz ja poprostu zainstalowana.

Powyzsza pomoc okazala sie super i do tego pomoze mi ogolnie z przezroczystosciami i cala reszta. Teraz doinstalowalem FreeType'a i juz wogole zaczela sie bajka smile.gif rewelacyjne mozliwosci. Mozna bezbolesnie uzywac funkcji do ttfow i ogolnie miec je na stronie smile.gif
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.