Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Problem z tworzeniem miniatur - imagepng, Tworzy nie prawidłowy plik PNG
Agape
post
Post #1





Grupa: Zarejestrowani
Postów: 384
Pomógł: 13
Dołączył: 16.06.2006

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


Mam funkcje która tworzy miniaturki z JPG, GIF i PNG. Wszystkie formaty działają poprawnie, niestety przy tworzeniu PNG tworzy nieprawidłowy plik, który się nie wyświetla ani na stronie ani lokalnie. Linijka 34.

  1. function miniaturka($folder, $plik,$max_x,$max_y, $kompresja){
  2. /*
  3. * source - obrazek jpeg
  4. * max_x - maksymalna szerokosc pomniejszonego obrazka
  5. * max_y - maksymalna dlugosc pomniejszonego obrazka
  6. */
  7. $source=$folder.$plik;
  8. if(exif_imagetype($source) == IMAGETYPE_JPEG){
  9. $img_src = imagecreatefromjpeg($source);
  10. }elseif(exif_imagetype($source) == IMAGETYPE_GIF){
  11. $img_src = imagecreatefromgif($source);
  12. }elseif(exif_imagetype($source) == IMAGETYPE_PNG){
  13. $img_src = imagecreatefrompng($source);
  14. }else{
  15. unlink($source);
  16. die('Zly typ pliku. Akceptowane formaty to: JPG/JPEG, GIF, PNG<br>
  17. <a href="upload_zdjecia.php">zmien</a>');
  18. }
  19. $image_x = imagesx($img_src);
  20. $image_y = imagesy($img_src);
  21. if($image_x > $image_y){ //landscape
  22. $ratio = ($image_x > $max_x) ? $max_x/$image_x : 1;
  23. }else{ //portrait
  24. $ratio = ($image_y > $max_y) ? $max_y/$image_y : 1;
  25. }
  26. $new_x = $image_x*$ratio;
  27. $new_y = $image_y*$ratio;
  28. $new_img = imagecreatetruecolor($new_x, $new_y);
  29. imagecopyresampled($new_img, $img_src, 0, 0, 0, 0, $new_x, $new_y, $image_x, $image_y);
  30. if(exif_imagetype($source) == IMAGETYPE_JPEG){
  31. imagejpeg($new_img, $folder.'t_'.$plik,$kompresja);
  32. }elseif(exif_imagetype($source) == IMAGETYPE_GIF){
  33. imagegif($new_img, $folder.'t_'.$plik,$kompresja);
  34. }elseif(exif_imagetype($source) == IMAGETYPE_PNG){
  35. imagepng($new_img, $folder.'t_'.$plik,$kompresja);
  36. }
  37. ImageDestroy($img_src);
  38. ImageDestroy($new_img);
  39. }


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
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




KOMPRESJA! Zobacz jakie parametry mają imagegif i imagepng. Pierwsza nie ma tego parametru wcale, a dla png ma być ona w przedziale 0-9... Nie wymyślaj funkcji jakich nie ma w GD2 winksmiley.jpg


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Agape
post
Post #3





Grupa: Zarejestrowani
Postów: 384
Pomógł: 13
Dołączył: 16.06.2006

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


No tak, nie zwróciłem uwagi na parametry. To była gotowa funkcja i ufałem, że ktoś dobrze napisał. Dzięki za pomoc.

Pomóżcie mi jeszcze rozszyfrować linijkę:
  1. $ratio = ($image_x > $max_x) ? $max_x/$image_x : 1;

Nie mam pojęcia co oznacza ?.
Potrzebuję obliczyć ratio w innym równaniu, gdzie wychodzi liczba niecałkowita i potrzebuje ten ułamek zaokrąglić w górę. ceil działa nie tak jak bym chciał, zaokrągla do liczby całkowitej a round nie zawszę zaokrągla w górę, np przy 1.2 da 1 a ja potrzebuje żeby dało 2. Da się jakoś połączyć te funkcje ?


--------------------
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 - 14:51