Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]+GD Przejście między zdjęciami
Kazaan
post
Post #1





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 17.07.2008

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


Witam, jak w temacie, chodzi mi o stworzenie skryptu dzieki ktoremu uzyskal bym przejscie między dwoma zdjęciami przy użyciu gd...
macie jakies pomysły ? jedyne co przychodzi mi do glowy to stopniowe nakladanie transparentu z jednej strony zdjecia do polowy, i tak przygotowane zdjecie nalozyc na kolejne. Kwestia jak to zrobic ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




W takim razie więc:
1. Stwórz obraz o ostatecznej wielkości.
2. Skopiuj na niego obrazek A
3. Ustaw alpha blending na true
4. Dla obrazka B znajdź część wspólną obrazka A i B (100px) oraz w skrypcie ustaw odpowiednio wartości dla alpha przeliczając sobie.
5. Skopiuj na wynikowy obrazek ten fragment.
6. Wyłącz alpha blending
7. Skopiuj pozostałą część obrazka B na wynikowy.
8. Zapisz plik.
9. Jeśli nie zadziała to sprawdź czy aby kanałem alpha nie trzeba się zabawić poprzez imagesavealpha.

Tak minimalizujesz obniżenie wydajności poprzez operację tylko dla części wspólnej obu.
Go to the top of the page
+Quote Post
Kazaan
post
Post #3





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 17.07.2008

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


Cytat(thek @ 7.03.2011, 16:17:45 ) *
W takim razie więc:
1. Stwórz obraz o ostatecznej wielkości.
2. Skopiuj na niego obrazek A
3. Ustaw alpha blending na true
4. Dla obrazka B znajdź część wspólną obrazka A i B (100px) oraz w skrypcie ustaw odpowiednio wartości dla alpha przeliczając sobie.
5. Skopiuj na wynikowy obrazek ten fragment.
6. Wyłącz alpha blending
7. Skopiuj pozostałą część obrazka B na wynikowy.
8. Zapisz plik.
9. Jeśli nie zadziała to sprawdź czy aby kanałem alpha nie trzeba się zabawić poprzez imagesavealpha.

Tak minimalizujesz obniżenie wydajności poprzez operację tylko dla części wspólnej obu.



Jak napisaleś tak 'prawie' zarobilem (IMG:style_emoticons/default/biggrin.gif)
Po pierwsze robie to w 2 krokach:

1. Na pierwszy obrazek nakładam maskę z gradientem biało -> czarnym - i na podstawie maski wyliczany jest narastajacy transparent
2. Na drugi obrazek nakladam odwrotną maskę.
3. Składam dwa odpowiednio przygotowane obrazki w jeden, z tym że mam jedna uwage, alpha blending musi byc ustawiona na false.

przykładowy kod (nie mój) nakładajacy maske na obrazek:

  1. function nalozMaske( &$picture, $mask, $name) {
  2. // Get sizes and set up new picture
  3. $xSize = imagesx( $mask );
  4. $ySize = imagesy( $mask );
  5. $newPicture = imagecreatetruecolor( $xSize, $ySize );
  6. imagesavealpha( $newPicture, true );
  7. imagefill( $newPicture, 0, 0, imagecolorallocatealpha( $newPicture, 0, 0, 0, 127 ) );
  8.  
  9.  
  10. // Perform pixel-based alpha map application
  11. for( $x = 0; $x < $xSize; $x++ ) {
  12. for( $y = 0; $y < $ySize; $y++ ) {
  13. $alpha = imagecolorsforindex( $mask, imagecolorat( $mask, $x, $y ) );
  14. $alpha = 127 - floor( $alpha[ 'red' ] / 2 );
  15. $color = imagecolorsforindex( $picture, imagecolorat( $picture, $x, $y ) );
  16. imagesetpixel( $newPicture, $x, $y, imagecolorallocatealpha( $newPicture, $color[ 'red' ], $color[ 'green' ], $color[ 'blue' ], $alpha ) );
  17. }
  18. }
  19.  
  20. // Copy back to original picture
  21. imagedestroy( $picture );
  22. $picture = $newPicture;
  23. imagepng($picture,$name);
  24. }


Z nakładanie fotek chyba sobie poradzicie.


A tu mam pytanie do znawców imagemagick: jest to kod ktory powinien robic dokladnie to co bylo opisane wyzej, z ta roznica ze w 2 linijkach.
Kod jest skopiowany z manuala, zmienilem tylko nazwy plikow, pytanie brzmi: dlaczego to nie dziala?

  1. obrazek1.png -extent 800x200 obrazek2.png \
  2. maska.png -gravity East -composite fota_wynik.jpg
  3.  



Duże podziękowania dla thek! (IMG:style_emoticons/default/smile.gif)


Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 12.10.2025 - 13:31