Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [GD2] Przeźroczystość PNG
deha21
post
Post #1





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

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


Witam,
Szukałem na forum i na necie informacji na ten temat, niestety żadne z podanych porad nie rozwiązało mojego problemu. Żadne imagealphablending, imagecolorallocatealpha, imagesavealpha nic nie robi. Może coś źle robię?

Mam skrypt który zmniejsza zdjęcia do podanych rozmiarów. Przy przeźroczystych plikach PNG tło zamienia się na czarne. Jak zrobić żeby tło wciąż było przeźroczyste?

Oto kod:
  1. function resize($image_file, $new_width, $new_height, $file_name, $quality){
  2. $info = getimagesize($image_file);
  3. if($info === false)
  4. return false;
  5. $img = null;
  6. switch($info[2]){
  7. case IMAGETYPE_JPEG:
  8. $img = imagecreatefromjpeg($image_file);
  9. break;
  10. case IMAGETYPE_GIF:
  11. $img = imagecreatefromgif($image_file);
  12. break;
  13. case IMAGETYPE_PNG:
  14. $img = imagecreatefrompng($image_file);
  15. break;
  16. default:
  17. return false;
  18. }
  19. $th = imagecreatetruecolor($new_width, $new_height);
  20. imagecopyresampled($th, $img, 0, 0, 0, 0, $new_width, $new_height, $info[0], $info[1]);
  21.  
  22. switch($info[2]){
  23. case IMAGETYPE_JPEG:
  24. imagejpeg($th, $file_name.'.jpg', $quality);
  25. break;
  26. case IMAGETYPE_GIF:
  27. imagegif($th, $file_name.'.gif');
  28. break;
  29. case IMAGETYPE_PNG:
  30. imagepng($th, $file_name.'.png');
  31. break;
  32. }
  33. imagedestroy($th);
  34. imagedestroy($img);
  35. return true;
  36. }


--------------------
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #2





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




Spróbuj pokombinować poniższy sposób:
  1. $imgX = imagecreatetruecolor(200, 200);
  2. imagealphablending($imgX, false);
  3. imagesavealpha($imgX, true);

lub:
  1. header("Content-Type: image/png");
  2. imagealphablending($imgX, false);
  3. imagesavealpha($imgX, true);


Ten post edytował Kshyhoo 8.10.2009, 08:55:03


--------------------
Go to the top of the page
+Quote Post
deha21
post
Post #3





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

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


Wielkie dzięki działa pierwszy sposób biggrin.gif

Hmm... a jest coś co działa na GIF? Bo w GIFie też czarne tło się robi.

Ten post edytował deha21 8.10.2009, 09:59:58


--------------------
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




imagealphablending na true.
imagesavealpha nie dajesz. Jeżeli coś bedzie nie tak to pisz


--------------------
Go to the top of the page
+Quote Post
deha21
post
Post #5





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

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


Działa. Myślałem, że nie działa ale pomyliłem kolejność i teraz jest ok. Dzięki biggrin.gif

Kurde osobno dla PNG i GIFów działa ale gdy chcę to rozdzielić na 'jeżeli GIF to sposób taki, jeżeli PNG to taki' wszystko się pasuje :/
  1. $th = imagecreatetruecolor($new_width, $new_height);
  2.  
  3. switch($info[2]){
  4. case IMAGETYPE_JPEG:
  5. imagecopyresampled($th, $img, 0, 0, $x1, $y1, $w, $h, $w, $h);
  6. imagejpeg($th, $image_file, 95);
  7. break;
  8. case IMAGETYPE_GIF:
  9. imagealphablending($th, true);
  10. imagecopyresampled($th, $img, 0, 0, $x1, $y1, $w, $h, $w, $h);
  11. imagegif($th, $image_file);
  12. break;
  13. case IMAGETYPE_PNG:
  14. imagealphablending($th, false);
  15. imagesavealpha($th, true);
  16. imagecopyresampled($th, $img, 0, 0, $x1, $y1, $w, $h, $w, $h);
  17. imagepng($th, $image_file);
  18. break;
  19. }


Ten post edytował deha21 8.10.2009, 11:02:27


--------------------
Go to the top of the page
+Quote Post
wookieb
post
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A sprawdź czy na pewno wykonują się odpowiednie linie kodu w zależności od typu zdjęcia. Dodatkowo porównaj sobie czy aby na pewno twój kod jest "taki sam" jak twoje poszczególne próby.


--------------------
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #7





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




Cytat(deha21 @ 8.10.2009, 15:26:22 ) *
Kurde osobno dla PNG i GIFów działa ale gdy chcę to rozdzielić na 'jeżeli GIF to sposób taki, jeżeli PNG to taki' wszystko się pasuje :/

Zrób to w osobnych plikach i inkluduj...


--------------------
Go to the top of the page
+Quote Post
deha21
post
Post #8





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

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


Wiem co mi skomplikowało sprawę. Mam dwa pliki - jeden od kadrowania a drugi od resize'u zdjęć. Niechąco z jednego przekopiowałem kawałek kodu z drugiego i dlatego się psuło. Teraz już wszystko poprawiłem. Jednak dla GIFów nie działa dalej - dziwne bo wcześniej działało :/

  1. switch($info[2]){
  2. case IMAGETYPE_JPEG:
  3. imagecopyresampled($th, $img, 0, 0, 0, 0, $new_width, $new_height, $info[0], $info[1]);
  4. imagejpeg($th, $image_file, 95);
  5. break;
  6. case IMAGETYPE_GIF:
  7. imagealphablending($th, true);
  8. imagecopyresampled($th, $img, 0, 0, 0, 0, $new_width, $new_height, $info[0], $info[1]);
  9. imagegif($th, $image_file);
  10. break;
  11. case IMAGETYPE_PNG:
  12. imagealphablending($th, false);
  13. imagesavealpha($th, true);
  14. imagecopyresampled($th, $img, 0, 0, 0, 0, $new_width, $new_height, $info[0], $info[1]);
  15. imagepng($th, $image_file);
  16. break;
  17. }


--------------------
Go to the top of the page
+Quote Post
krakiewicz.pl
post
Post #9





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

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


Zbadaj sprawę z ImageMagick, jest bardziej rozbudowane niż GD:
http://www.php.net/manual/en/book.imagick.php
http://www.phpro.org/tutorials/Imagick.html

Opisałem na swoim blogu jak łączyć warstwy PNG ze sobą oraz zmieniać kolor tła.
http://krakiewicz.pl/png-laczenie-obrazow-...php-imagemagick
Go to the top of the page
+Quote Post
Mrokodajny
post
Post #10





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 13.02.2012

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


Mam następującą prościutką funkcyjkę resajzującą wyłącznie gify i jest tak problem bo pojawia się czarne tło i nie wiem o co chodzi:


  1. function resize($image_file, $new_width, $new_height, $file_name)
  2. {
  3. $img = imagecreatefromgif($image_file);
  4. $x=imagesx($img);
  5. $y=imagesy($img);
  6. $th = imagecreatetruecolor($new_width, $new_height);
  7. imagealphablending($th, true);
  8. imagecopyresampled($th, $img, 0, 0, 0, 0, $new_width, $new_height, $x, $y);
  9. imagegif($th, $file_name);
  10. imagedestroy($th);
  11. imagedestroy($img);
  12. return true;
  13. }
  14.  

uprzejmie proszę o pomoc co źle robię
z góry dziękuję za pomoc

Ten post edytował Mrokodajny 6.05.2017, 20:45:07
Go to the top of the page
+Quote Post

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: 19.08.2025 - 09:00