Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]skalowanie
Forum PHP.pl > Forum > Przedszkole
Cromwell
Piszę skrypt, który ma między innymi skalować zdjęcia.
Mają one zazwyczaj rozdzielczość około 500px wysokości i szerokości.
Skaluję je do różnych rozmiarów, między innymi do 1024x768, czy też 1280x1024

Skrypt wygląda mniej więcej tak:
  1. switch ($rozmiar)
  2. {
  3. case "1":
  4. $nszerokosc = "1024";
  5. $nwysokosc = "768";
  6. break;
  7. case "2":
  8. $nszerokosc = "1152";
  9. $nwysokosc = "864";
  10. break;
  11. ....
  12. ....
  13. }
  14.  
  15. ...
  16.  
  17. if ($rozmiar < 1)
  18. {
  19. $im = imagecreatefromjpeg($file);
  20. }
  21. else
  22. {
  23. list($width, $height) = getimagesize($file);
  24. $thumb = imagecreatetruecolor($nszerokosc, $nwysokosc);
  25. $im = imagecreatefromjpeg($file);
  26. imagecopyresized($thumb, $im, 0, 0, 0, 0, $nszerokosc, $nwysokosc, $width, $height);
  27. }
  28.  
  29. ...
  30.  
  31. if ($rozmiar < 1)
  32. {
  33. imagejpeg($im);
  34. imagedestroy($im);
  35. }
  36. else
  37. {
  38. imagejpeg($thumb);
  39. imagedestroy($thumb);
  40. }


Mam z tym dwa problemy, właściwie jeden problem i jedno pytanie:

Problem:
Niektóre obrazki ładnie skaluje, nawet do bardzo dużych rozdzielczości, innych natomiast nie chce (wyświetlają się w oryginalnych rozmiarach), bądź pojawiają się przekłamania (zamiast np. 1280x1200 jest 1024x768).

Wszystkie obrazki mają rozszerzenie jpg, podobne rozmiary (zarówno wielkość pliku jak i rozmiary grafiki).
Jak to możliwe, że niektóre obrazki ładnie skaluje, innych nie chce?

Pytanie:
Żadnych obrazków nie chce skalować do największej z możliwych rozdzielczości - 2560x1600. Z 1920x1440 jeszcze ładnie skaluje, jednak z większą już nie.
Czy ma to związek zbyt dużym zżeraniem zasobów podczas procesu?
erix
Cytat
Czy ma to związek zbyt dużym zżeraniem zasobów podczas procesu?

Owszem, ilość przydzielonej pamięci. Lepiej używać ImageMagick.

Cytat
Niektóre obrazki ładnie skaluje, nawet do bardzo dużych rozdzielczości, innych natomiast nie chce (wyświetlają się w oryginalnych rozmiarach), bądź pojawiają się przekłamania (zamiast np. 1280x1200 jest 1024x768).

Ciężko powiedzieć. Może pomogłaby rekompilacja GD?
Cromwell
Wielkie dzięki smile.gif
Kod teraz wygląda tak:
  1. góra bez zmian
  2. ....
  3.  
  4. if ($rozmiar < 1)
  5. {
  6. $im = imagecreatefromjpeg($file);
  7. }
  8. else
  9. {
  10. $image = new Imagick($file);
  11. $image->resizeImage($nszerokosc, $nwysokosc, Imagick::FILTER_POINT);
  12. }
  13.  
  14. ....
  15.  
  16. if ($rozmiar < 1)
  17. {
  18. imagejpeg($im);
  19. imagedestroy($im);
  20. }
  21. else
  22. {
  23. echo $image;
  24. $image->destroy();
  25. }


Nie ma problemu ze złym skalowaniem (zawsze skaluje do odpowiedniego rozmiaru), a także najwyższa rozdzielczość działa bardzo dobrze.

Tylko jeden problem - co jakiś czas zdjęcie się nie ładuje. Początkowo wystarczyło odświeżyć stronę, ale teraz jak się nie załaduje, to już się nie załaduje. To dziwne, bo testując skrypt kilka sekund wcześniej sprawdzałem tą samą rozdzielczość, działała, a po chwili przestała..

Aha - nie wiem, czy to ważne, ale dodam, że rozmiar obrazka wybiera się z listy rozwijanej, następnie klika się submit i dane idą getem do tej samej strony (czyli skrypt się przeładowuje). Tak więc, mogę w przeciągu 10 sekund kilka razy przeskalować obrazek.
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.