Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Obrazek png
Forum PHP.pl > Forum > PHP
igors
  1. <?php
  2.  header(Content-type: image/png); //zrobiłem bez cudzysłowów, bo na tym forum jest jakiś chochlik (czyt. bug)
  3. $image = $_GET['id'];
  4. $obrazek = ImageCreateFromPng($image);
  5. ImagePng($obrazek);
  6. ?>

To jest uproszczona wersja tego, co tworzę, ale wystarczająco pokazuje, na czym polega mój problem.

Adres do obrazka (w tej uproszczonej wersji) wygląda tak: obrazek.php?id=http://tiraeth.kom.pl/buddy.png

Oryginalny obrazek to naturalnie http://tiraeth.kom.pl/buddy.png (jest to awatar jednego z użytkowników tego forum).

Przy moim kodzie w obrazku zamiast przezroczystego tła wyświetla się czarne (zauważyłem, że nie tylko czarne, czasami wychodzi białe z prostokątami).
I naturalnie proszę was o pomoc w rozwiązaniu tego problemu.
tiraeth
Te, a co Ty się tam panoszysz z moim avatarem tongue.gif ?

  1. <?php
  2. header('Content-type: image/png');
  3. $img = imagecreatefrompng('http://tiraeth.kom.pl/buddy.png');
  4. imagealphablending($img, true); // TO
  5. imagesavealpha($img, true); // i TO
  6. imagepng($img);
  7. ?>
igors
  1. <?
  2. $wsp_skali=(isset($_GET['wsp_skali']))?($_GET['wsp_skali']):(10);
  3. $min_max_szer=(isset($_GET['max_szer']))?($_GET['max_szer']):(70);
  4. $min_max_wys=(isset($_GET['max_wys']))?($_GET['max_wys']):(70);
  5. $plik=$_GET['plik'];
  6.  
  7.  
  8. list($obrazek_szer, $obrazek_wys, $typ, $attr)=getimagesize($plik);
  9.  
  10. if($typ==2) { $obrazek = ImageCreateFromJPEG($plik); }
  11. else if($typ==1) { $obrazek = ImageCreateFromGIF($plik); }
  12. else if($typ==3) { $obrazek = ImageCreateFromPNG($plik);  imagealphablending($obrazek, true); imagesavealpha($obrazek, true); } // TU
  13. //skaluj mniejsze
  14. $skaluj_do=($obrazek_szer<=$obrazek_wys)?('szer'):('wys');
  15.  
  16. if($skaluj_do=='wys') //jesli wymiary obrazka sa wieksze od rozmiarów miniaturki
  17. {//wysokosc mniejsza, skaluj do niej
  18.  
  19. $min_wys=$min_max_wys; //wysokosc 100
  20. $wsp=$min_max_wys/$obrazek_wys;
  21. $min_szer=ceil($wsp*$obrazek_szer);
  22.  
  23. } else {
  24.  
  25. $min_szer=$min_max_szer; //wysokosc 100
  26. $wsp=$min_max_szer/$obrazek_szer;
  27. $min_wys=ceil($wsp*$obrazek_wys);
  28. }
  29.  
  30. $miniaturka=@ImageCreateTrueColor($min_szer,$min_wys);
  31. @ImageCopyResampled($miniaturka, $obrazek, 0, 0, 0, 0, $min_szer, $min_wys, $obrazek_szer, $obrazek_wys);
  32.  
  33. if($min_szer>$min_max_szer) //szer miniaturki wieksza od maksymalnej dopuszczalnej
  34. {
  35. $wspx=round(($min_szer-$min_max_szer)/2);
  36. }
  37. if($min_wys>$max_wys)
  38. {
  39. $wspy=round(($min_wys-$min_max_wys)/2);
  40. }
  41. //wspx,wspy to lewy gorny rog wycinka 
  42.  
  43. if($min_wys<$min_max_wys) $min_max_wys=$min_wys;
  44. if($min_szer<$min_max_szer) $min_max_szer=$min_szer;
  45.  
  46.  
  47. $miniaturka2=@ImageCreateTrueColor($min_max_szer,$min_max_wys);
  48. if(@ImageCopy($miniaturka2, $miniaturka, 0, 0 , $wspx, $wspy, $min_max_szer, $min_max_wys));
  49. {
  50.  if(exif_imagetype($plik) == IMAGETYPE_JPEG){ Header('Content-type: image/jpg');
  51. ImageJPEG($miniaturka2,'',70); }
  52. elseif(exif_imagetype($plik) == IMAGETYPE_PNG){ Header('Content-type: image/png');
  53. imagealphablending($miniaturka2, true); //tu
  54. imagesavealpha($miniaturka2, true); //tu
  55. ImagePNG($miniaturka2);
  56. }
  57. elseif(exif_imagetype($plik) == IMAGETYPE_GIF){ Header('Content-type: image/gif');
  58. ImageGIF($miniaturka2); }
  59. }
  60.  
  61. ImageDestroy($miniaturka);
  62. ImageDestroy($miniaturka2);
  63. ImageDestroy($obrazek);
  64. ?>


Ha! Próbowałem to wstawić do skryptu znalezionego na tym forum, ale png nadal ma czarne tło.
tiraeth
Przed kopiowaniem i zmianą rozmiarów obrazka też musisz jego uchwytowi nadać alphablending oraz savealpha
igors
Kurczę, chyba poproszę cię, żebyś pokazał palcem, gdzie konkretnie to wstawić. Próbowałem wszędzie gdzie się da, wstawiając
  1. <?php
  2. imagealphablending($miniaturka, true);
  3. imagesavealpha($miniaturka, true);
  4.  
  5. imagealphablending($miniaturka2, true);
  6. imagesavealpha($miniaturka2, true);
  7.  
  8. //i
  9.  
  10. imagealphablending($obrazek, true);
  11. imagesavealpha($obrazek, true);
  12. ?>


Wynik wiadomy, czyli NIC.

Pomożesz?
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.