Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]skalowanie zdjęć z katalogu
Forum PHP.pl > Forum > Przedszkole
Cromwell
Muszę przeskalować zdjęcia w jednym katalogu na serwerze.
Zdjęcia zajmują ponad 3 giga, jest ich kilkadziesiąt tysięcy.
Zależy mi po prostu na stworzeniu małych miniaturek.

Nazwy zdjęć to hashe md5, czyli mają 32 znaki, żadnych rozszerzeń. W tym samym katalogu są też inne pliki, z innymi nazwami.
Początkowo próbowałem 'starą' metodą, to jest funkcja do zmniejszania zdjęć, a następnie mielenie katalogu i tworzenie miniaturki po natrafieniu na odpowiedni plik.
Fajnie działało, ale wywalało mi błąd 500 serwera, więc to raczej nie tędy droga.

Postanowiłem skorzystać z Imagick - przerobiłem skrypt na taką postać:
  1. <?php
  2. if ($_GET['start'] == 'tak')
  3. {
  4. $folder = dir('photos');
  5. while($plik = $folder->read())
  6. {
  7. if (($plik != '.') AND ($plik != '..'))
  8. {
  9. if (preg_match_all('/^.{32}$/', $plik))
  10. {
  11. if (!file_exist($plik.'.jpg'))
  12. {
  13. $im = new Imagick();
  14. $im->readImage($plik);
  15. $im->thumbnailImage(300, null);
  16. $im->writeImage($plik.'.jpg');
  17. $im->clear();
  18. $im->destroy();
  19. }
  20. }
  21. }
  22. }
  23. echo 'skonczone';
  24. $folder->close();
  25. }
  26. else
  27. {
  28. echo '<form action="cap.php" method="get">
  29. <input type=hidden name=start value="tak">
  30. <input type="submit" value="start" />
  31. </form>';
  32. }
  33. ?>

Problem w tym, że teraz nie przerabia żadnych zdjęć.. jeśli wywalę mielenie katalogu i sprawdzanie czy pliki mają w nazwie 32 znaki, to kilka plików zmieni i stoi.
Wie ktoś, gdzie tu jest błąd?
erix
A nie prościej użyć po prostu mogrify? Jedna komenda, dużo szybsze, mniej pamięci zeżre.

http://www.imagemagick.org/script/mogrify.php
Cromwell
ok..
tylko nie mam dostępu do linii komend, jedyne czym mogę operować, to php..

mógłbym prosić o przykład, jak to połączyć z tym moim tworkiem?
erix
Ale jak nie masz zablokowanego shell_exec, to działaj śmiało.

Wiele hostingów ma już ImageMagick, popróbuj.
Cromwell
Guzik, to nie działa.

Co mnie zastanawia odnośnie mojego wcześniejszego kodu - dlaczego dla pojedynczego pliku (zmiennej $plik przypisuje nazwę pliku) bez problemu tworzy miniaturę, natomiast jeśli daję przerabianie katalogu, to już nie działa.
Wszystko przy imagick pozostawiam tak samo, jedynie komentuję pozostały kod..
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.