Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dynamiczne tworzenie miniaturek
Forum PHP.pl > Forum > PHP
Black-Berry
Mam taki problem:

Do tej pory dodając zdjęcie np do galerii od razu po uploadzie docinałem miniaturkę. Chciałbym zmienić teraz system na trochę inny. Chodzi o to, żeby miniaturki były tworzone dynamicznie tzn. przy wyświetlaniu 1 strony z galerią ze zdjęć w rozdzielczości około 800x600 generowałbym przeciętnie około 12-16 miniaturek za każdym razem gdy ktoś odświeży stronę. Czy jednak taki sposób nie sprawi że strona generować się będzie zbyt długo ? Ma ktoś doświadczenie w tej kwestii? Mogłby ktoś doradzić odpowiedznie rozwiązania?
l0ud
To zależy od wielkości zdjęć i wydajności serwera, mimo wszystko stanowczo odradzam takiego rozwiązania. Optymistycznie patrząc strona będzie się generować kilka sekund, a przy większej liczbie użytkowników zawalisz cały serwer...
Black-Berry
ale to znaczy że przeprowadzałeś takie testy ? Bo w sumie napisałbym sobie skrypt testujący ale nie mam za dużo czasu :/
l0ud
Powiem tak, na moim serwerze, który nie był aż taki tragiczny, generowanie jednej miniaturki pliku jpeg o rozdzielczości 1024/768 za pomocą gd2 i imagecopyresampled trwało około sekundy. Pomyśl co się stanie, gdy takich miniaturek będziesz chciał 20... wydajnościowo staniesz za naszą-klasą snitch.gif
Black-Berry
w takim razie czas na plan 'B'. Dzięki wielkie l0ud
bfcior
Lepiej jest tworzyc automagicznie;] miniaturkę przy dodawaniu zdjęcia.

Ja robie tak, że miniatruki przechowuje w bazie danych a zdjęcia w oddzielnych katalogach..

Przy wywołaniu strony pobierasz miniaturke, i robisz odwołanie do większego zdjęcia..
Kowalikus
Nieco innym pomysłem na to jest stworzenie generowania wraz z cacheowaniem obrazków. Otóż możesz sobie w zdefiniować reguły do ModRewrite:

Załóżmy, że ścieżka do obrazka wygląda nastepująco:
ścieżka_gdzie_masz_obrazki/nazwa_obrazka,800x600.jpg

1. sprawdza czy plik istnieje
2. jeśli nie istnieje to sprawdza regułę: ^ścieżka_gdzie_masz_obrazki/([0-9a-zA-z_-]+),800x600.jpg$ generuj_obrazek.php?id_obrazka=$1 [L]

Skrypt w pliku generuj_obrazek.php generowałby obrazek, zapisywałby go, a następnie zwracał do przeglądarki jako plik jpg.
Przy kolejnym odwołaniu się do takiego obrazka warunek 1 zostałby spełniony.
Black-Berry
@Kowalikus To naprawdę chyba dobry sposób ale po co do tego używać mod_rewrite ?smile.gif Wystarczy sprawdzić za pomocą file_exsist() [tak mi się przynajmniej wydaje].

@bfcior A czy przechowywanie miniaturki w bazie jest wydajne ?
danket
Możesz też użyć gotowej klasy, phpThumb(), znajdziesz ją tu: http://phpthumb.sourceforge.net/
O tyle ją lubię, że phpThumb() po zrobieniu miniaturki cache'uje ją do katalogu i przy kolejnym wywołaniu sprawdza czy już zdjęcie było obrabiane. Chodzi dość szybko i przy odpowiednim skonfigurowaniu z imagemagickiem chodzi naprawdę bardzo wydajnie.
Dodatkową zaletą tej klasy jest to, że kompletnie nie obchodzi cię zdjecie samo w sobie, czyli jego rozmiar, czy jest pionowe czy poziome, czy jest gifem czy jpeg-iem a może png-iem. Wszystko ustawiasz sobie w pliku configuracyjnym i śmiga. W html wklejasz tylko <img src=phpThumb.php?src=/katalog/zdjecie.jpg&w=100px&q=80 /> i kuniec :) Możesz sobie ustawiac parametrami cuda wianki, jakość, przycięcie, zoom.... Dokumentacja jest bardzo bogata więc nie powinieneś mieć problemu.

Ja napisałem sobie kiedyś własną klase do obróbki zdjęć, ale jakoś polubiłem tę. Polecam.
Oczywiście w celach edukacyjnych i doświadczalnych radzę napisać swoją :))

Pozdrawiam
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.