Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tworzenie miniatur
Forum PHP.pl > Forum > PHP
deha21
Witam,
Mam skrypt który tworzy miniatury. Kiedyś skopiowałem go z forum i dostosowałem do swoich potrzeb. Teraz chciałbym go jeszcze raz przerobić.
Chodzi generalnie o to, żeby tworzył miniatury jpg/jpeg, gif, png a jeśli się da to nawet tiff i bmp.
Niestety po testach sprawdziłem, że obrazki które mają rozszerzenia pisane z dużej litery (np. *.PNG) nie chcą się przekształcać.
Druga sprawa to taka, że nawet jeśli przerobi plik png to mimo tego, że daje rozszerzenie png jest on jpg'iem. Jak to sprawdzić? Przeciągnąłem obrazek na pasek firefoxa i na tabie jest napisane "nazwa, JPEG, rozdzielczość". Dziwne dlaczego JPEG skoro konwertowałem PNG. Przy niekonwertowanych PNG oczywiście firefox wyświetla normalnie PNG.

Oto kod:
  1. <?
  2. $width=$_POST['width'];
  3. $height=$_POST['height'];
  4. $file=$_POST['file'];
  5.  
  6. $arr = pathinfo('../'.$file);
  7.  
  8. if($arr["extension"]=="gif" || $arr["extension"]=="jpg" || $arr["extension"]=="png" || $arr["extension"]=="jpeg")
  9. {
  10.  
  11. function resize($files, $new_w, $new_h, $save,$quality)
  12. {
  13. if (!is_readable($files))
  14. {
  15. return FALSE;
  16. }
  17. $info = @getimagesize($files);
  18. switch ($info['mime'])
  19. {
  20. case "image/gif":
  21. $files = imagecreatefromgif($files);
  22. break;
  23. case "image/jpeg":
  24. $files = imagecreatefromjpeg($files);
  25. break;
  26. case "image/png":
  27. $files = imagecreatefrompng($files);
  28. break;
  29. }
  30. $old_x = imageSX($files);
  31. $old_y = imageSY($files);
  32.  
  33. $th = ImageCreateTrueColor($new_w, $new_h);
  34. @imagecopyresampled($th, $files, 0, 0, 0, 0, $new_w, $new_h, $old_x, $old_y);
  35. @imagejpeg($th, $save,$quality);
  36. @imagedestroy($files);
  37. @imagedestroy($th);
  38. return TRUE;
  39. }
  40. resize('../'.$file, $width, $height, '../'.$file, 90);
  41. }
  42. ?>

Pozdrawiam
zzeus
Jak tworzysz obrazek korzystasz z różnych funkcji (imagecreatefromjpeg, imagecreatefromgif, imagecreatefrompng), tak samo przy zapisywaniu musisz korzystać z różnych funkcji w zależności od typu zdjęcia (imagejpeg, imagepng, imagegif).
Jak chodzi o brak działania dla rozszerzeń pisanych dużymi literami, to: mb_convert_case()
deirathe
A ja Ci polecam użycie tej klasy:
http://phpthumb.gxdlabs.com/
jest prosta w obsłudze i naprawdę daje sobie rade z takimi prostymi zadaniami na obrazkach smile.gif
bim2
Pisze JPG bo zapisujesz obrazek w jpg
  1. @imagejpeg($th, $save,$quality);
mls
Zamiast sprawdzać rozszerzenie pliku, sprawdź jego rzeczywisty typ - getimagesize
deha21
Dzięki.
Mam tylko problem z tym, żeby tworzyło PNG i GIF. Chciałem sprawdzić typ pliku i wtedy wywołać odpowiednią funkcję ale cos mi nie idzie.
Próbowałem to sprawdzanie zrobić przez switch (getimagesize, mime) oraz if (exif_imagetype).

Poza tym jestem ciekaw czy sprawdzanie rozszerzenia przez $pathinfo i ['extension'] jest prawidłowe. Bo czytałem, że są inne sposoby, np. przez getimagesize, exif_imagetype, image_type_to_mime_typ. Który jest najlepszy?
erix
Cytat
przez $pathinfo i ['extension'] jest prawidłowe

Niekoniecznie. Najbezpieczniej sprawdzać MIME.
zzeus
zobacz sobie też tutaj -> http://www.beldzio.com/bezpieczny-upload-plikow
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.