Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z nakładaniem kilku obrazków png transparent
Czadus
post
Post #1





Grupa: Zarejestrowani
Postów: 164
Pomógł: 4
Dołączył: 29.08.2008

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


Witam,

przeczytałem już dziesiątki stron szukając rozwiązania na mój problem i prawdę mówiąc, pomysłów mi już brakło, albo, po prostu rozwiązanie mam przed nosem jednak nie potrafię go poprawnie wykorzystać. Potrzebuję wykonać następującą operację, z kilku plików PNG zawierających przezroczystość, stworzyć jeden plik, np. jpg, po czym przekazać go bezpośrednio do klasy fpdf tworzącej plik PDF z zawartym wewnątrz, wcześniej utworzonym, obrazkiem.

Na chwilę obecną mój kod wygląda następująco:
Kod
header("Content-type: image/png");
        
$obrazek=ImageCreate(ustawienia::$modelWidth, ustawienia::$modelHeight);
    
for($i=0;$i<sizeof($images);++$i){
    $tess = imagecreatefrompng($images[$i]);
    
    list($width, $height, $type, $attr) = @getimagesize($images[$i]);
    imagealphablending($tess, true);
    imagesavealpha($tess, true);
    imagecopymerge($obrazek, $tess, 0, 0, 0, 0, $width, $height, 100);
}

imagepng($obrazek);
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
Kshyhoo
post
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Też miałem ten problem, ale po nasiadówce dwutygodniowej udało mi się coś sklecić. Przykład nałożenia 3 grafik z zachowaniem przezroczystości:
  1. <?php
  2. $obraz1 = ($_GET['obraz1']);
  3. $obraz2 = ($_GET['obraz2']);
  4. $obraz3 = ($_GET['obraz3']);
  5. $temp = ($_GET['temp']);
  6. $name = ($_GET['name']);
  7.  
  8. $img1 = imagecreatefrompng("../graf3/$obraz1");
  9. $img2 = imagecreatefrompng("../graf3/$obraz2");
  10. $img3 = imagecreatefrompng("../graf3/$obraz3");
  11.  
  12. $imgX = imagecreatetruecolor(200, 200);
  13. imagealphablending($imgX, false);
  14. imagesavealpha($imgX, true);
  15. // x do // y do // x skad // y skad // x do ser // y do wys // x skad ser // y skad wys
  16. ImageCopyResampled($imgX,$img1, 0, 0, 0, 0, 72,200, 72,200);
  17. ImageCopyResampled($imgX,$img2, 72, 0, 72, 0, 56,200, 56,200);
  18. ImageCopyResampled($imgX,$img3,128, 0,128, 0, 72,200, 72,200);
  19.  
  20. header("Content-Type: image/png");
  21. imagealphablending($imgX, false);
  22. imagesavealpha($imgX, true);
  23. imagepng($imgX, NULL);
  24. imagepng($imgX, "../tymcz/$name.k2.png");
  25. chmod("../tymcz/$name.k2.png", 0666);
  26.  
  27. imagedestroy($img1);
  28. imagedestroy($img2);
  29. imagedestroy($img3);
  30. imagedestroy($imgX);
  31. ?>
Go to the top of the page
+Quote Post
Czadus
post
Post #3





Grupa: Zarejestrowani
Postów: 164
Pomógł: 4
Dołączył: 29.08.2008

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


Dzięki za szybką odpowiedź, rzeczywiście, Twój kod pomógł, jednak nie we wszystkim. Oczywiście powstaje nowy obrazek png z przezroczystością, jednak z trzeba nakładanych, faktycznie naniesiony jest tylko jeden, ostatni w pętli. A mi zależy na tym, aby każdy naniesiony obrazek był widoczny poprawnie. Czy masz może na to radę(IMG:style_emoticons/default/questionmark.gif) Mój aktualny kod wygląda następująco:

Kod
$sizes='';

for($i=0;$i<sizeof($images);++$i){
    list($width, $height, $type, $attr) = getimagesize($images[$i]);
    $images[$i] = imagecreatefrompng($images[$i]);
    
    $sizes[$i][0]=$width;
    $sizes[$i][1]=$height;
}

$imgWidth=ustawienia::$modelWidth;
$imgHeight=ustawienia::$modelHeight;
if(sizeof($sizes)>0){
    $imgWidth=$sizes[0][0];
    $imgHeight=$sizes[0][1];
}

$obrazek = imagecreatetruecolor($imgWidth, $imgHeight);
imagealphablending($obrazek, false);
imagesavealpha($obrazek, true);

for($i=0;$i<sizeof($images);++$i) {
    ImageCopyResampled($obrazek ,$images[$i], 0, 0, 0, 0, $imgWidth, $imgHeight, $imgWidth, $imgHeight);
}

header("Content-Type: image/png");
imagealphablending($obrazek, false);
imagesavealpha($obrazek, true);
imagepng($obrazek, NULL);

for($i=0;$i<sizeof($images);++$i)
    imagedestroy($images[$i]);


W $images znajdują się ścieżki do plików png.
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #4





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Kod, który Ci podałem właśnie to robi - nakłada po kolei kilka grafik i zapisuje jako jedną. Możesz to sprawdzić tu.
Go to the top of the page
+Quote Post
Czadus
post
Post #5





Grupa: Zarejestrowani
Postów: 164
Pomógł: 4
Dołączył: 29.08.2008

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


I właśnie nie wiem, dlaczego u mnie widoczny jest ostatni z dołączanych grafik.... może gdzieś popełniłem błąd w tym kodzie.
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #6





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Widocznie pobiera Ci tylko ostatni w pętli...
Go to the top of the page
+Quote Post
Czadus
post
Post #7





Grupa: Zarejestrowani
Postów: 164
Pomógł: 4
Dołączył: 29.08.2008

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


Cytat(Kshyhoo @ 12.03.2010, 14:10:34 ) *
Widocznie pobiera Ci tylko ostatni w pętli...


No to na pewno, ale dlaczego, tego nie rozumiem..... Albo nadpisuje poprzednie?? Po skróceniu pętli, zawsze jest ostatni, jaki w pętli załadował......

Ten post edytował Czadus 12.03.2010, 14:35:06
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #8





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Nie musisz tego robić w pętli (po za pobraniem obrazków). Z tego co widzę, Twoja pętla chodzi tylko raz, więc musisz przestawić } w inne miejsca ;p
Go to the top of the page
+Quote Post
Czadus
post
Post #9





Grupa: Zarejestrowani
Postów: 164
Pomógł: 4
Dołączył: 29.08.2008

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


Każdy z poszczególnych plików png jest poprawnie nakładany w pętli, jednak, mimo poprawnie dodawanej przezroczystości, kolejny obrazek najpierw całkowicie przysłania poprzedni. A mi chodzi aby każdy był widoczny, wówczas z kilku grafik png stworzony zostanie jeden.
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #10





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




OK, spróbuj innej funkcji, odpowiedzialnej za nakładanie grafik godeł (4 godła na tarczy):
  1. <?php
  2. $godlo1 = ($_GET['godlo1']);
  3. $godlo2 = ($_GET['godlo2']);
  4. $godlo3 = ($_GET['godlo3']);
  5. $godlo4 = ($_GET['godlo4']);
  6. $name = ($_GET['name']);
  7.  
  8. $imgX=imagecreatefrompng("../tymcz/$name.k2.png");
  9. $img1=imagecreatefrompng("../graf7/$godlo1");
  10. $img2=imagecreatefrompng("../graf7/$godlo2");
  11. $img3=imagecreatefrompng("../graf7/$godlo3");
  12. $img4=imagecreatefrompng("../graf7/$godlo4");
  13.  
  14. imagecolortransparent($img1,imagecolorexact($img1,0,0,0));
  15. imagealphablending($img1, false); imagesavealpha($img1, true);
  16. imagecolortransparent($img2,imagecolorexact($img2,0,0,0));
  17. imagealphablending($img2, false); imagesavealpha($img2, true);
  18. imagecolortransparent($img3,imagecolorexact($img3,0,0,0));
  19. imagealphablending($img3, false); imagesavealpha($img3, true);
  20. imagecolortransparent($img4,imagecolorexact($img4,0,0,0));
  21. imagealphablending($img4, false); imagesavealpha($img4, true);
  22. // x do // y do // x skad // y skad // x do ser // y do wys // x skad ser // y skad wys
  23. ImageCopyResampled($imgX,$img1, 75, 37, 0, 0, 50, 50,200,200);
  24. ImageCopyResampled($imgX,$img2, 37, 75, 0, 0, 50, 50,200,200);
  25. ImageCopyResampled($imgX,$img3,112, 75, 0, 0, 50, 50,200,200);
  26. ImageCopyResampled($imgX,$img4, 75,112, 0, 0, 50, 50,200,200);
  27.  
  28. imagealphablending($imgX, false);
  29. imagesavealpha($imgX, true);
  30. header("Content-Type: image/png");
  31. imagepng($imgX, NULL);
  32. imagepng($imgX, "../tymcz/$name.png");
  33. chmod("../tymcz/$name.png", 0666);
  34.  
  35. imagedestroy($img1);
  36. imagedestroy($img2);
  37. imagedestroy($img3);
  38. imagedestroy($img4);
  39. imagedestroy($imgX);
  40. ?>
Go to the top of the page
+Quote Post
Czadus
post
Post #11





Grupa: Zarejestrowani
Postów: 164
Pomógł: 4
Dołączył: 29.08.2008

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


Działa..... dzięki.....
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: 24.12.2025 - 04:36