[PHP] Gallery moet zelf thumbnails maken

Pagina: 1
Acties:

Onderwerpen


  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 10:36
Als PHP leertuin ben ik zelf een simpele photo gallery aan het maken waarbij ik gebruik maak van Bootstrap, Filtrify, blueimp Gallery, en jQuery Lazy Load plugin. Het idee is één grote pagina met thumbnails waar mbv filtrify gezocht kan worden naar items die geselecteerd worden uit de IPTC keywords. De Lazy Load plugin zorgt ervoor dat alleen de thumbnails geladen worden die daadwerkelijk op het scherm staan, zodat de gallery heel groot kan worden zonder op te blazen. Dit alles werkt prachtig. Nu zit ik alleen met de volgende uitdaging:

De thumbnails heb ik nu gemaakt via een batch in Photoshop en apart geupload. Nou is deze Photoshop stap nogal bewerkelijk, dus ik wil dit graag door PHP zelf laten doen, zodat de gallery zelfvoorzienend is en eenvoudig te hergebruiken. De resize code heb ik al, maar het maken van honderden thumbnails duurt te lang, PHP timed uit.

Nu is mijn vraag: hoe kan ik ervoor zorgen dat - als de gallery voor de eerste keer geladen wordt, de thumbnails netjes gegenereerd worden, zonder dat het PHP process een timeout geeft?

Een mogelijk oplossing is om - als er nog thumbnails te genereren zijn, dit voor een aantal of voor x aantal seconden dit doen en daarna de pagina naar zichzelf redirecten, net zolang tot alle thumbnails klaar zijn. Dit lijkt me nogal een 2005 oplossing. Zou ook wel eens rommelig kunnen worden met meerdere simulaten requests.

Een andere mogelijkheid is een process spawnen, maar dat is een boel extra administratie en lastig om goed te krijgen wat ik zo her en der lees.

Zijn er andere fatsoenlijke alternatieven die ik over het hoofd zie? Heb weinig constructiefs gevonden in mijn zoektocht.

Er is geen upload functionaliteit, het idee is de PHP files op je site zetten, zelf via FTP de images droppen en dan gaan. Use-case is een verder vrijwel statische fotogallery.

Ik heb vandaag geen demo site, maar dat kan ik morgen wel in elkaar zetten.

  • kaesve
  • Registratie: Maart 2009
  • Laatst online: 16-05 03:04
Zou je niet op het moment dat je een thumbnail wil laden aan de serverside kant kunnen kijken of deze bestaat, en zo nee op dat moment hem genereren?

Stel bijvoorbeeld dat je een afbeelding hebt met de naam afb.jpg, waar nog geen thumbnails voor zijn. De gallery wordt geladen en doet een request voor thumbnails/afb.jpg. Op je server kun je dan met bijvoorbeeld mod_rewrite de request redirecten als de gevraagde thumbnail niet bestaat - je redirect dan naar je script om de afbeelding te resizen.

Op deze manier resize je maximaal 1 afbeelding per request en zul je dus hopelijk geen timeout krijgen

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Wat ik zou doen is thumbnail tonen indien beschikbaar, anders browser laten resizen (/full-size tonen met max-width en max-height ingesteld).
En dan ajax requests opzetten om de 1e beschikbare full-size te verkleinen (en te replacen in de dom) en dan bij elk antwoord een nieuwe request te sturen.

Op deze manier hebben je bezoekers altijd plaatjes in beeld en helpen ze zelf dat het beter wordt.

Mochten je plugins stuk gaan op full-size images die door browser geresized worden dan kan je deze ook vervangen door een loading images static beeldje.

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 02-12 08:10

Matis

Rubber Rocket

Wat ik zou doen is de thumbnails asynchroon laden middels AJAX en aan de serverkant een cache aanleggen van gegenereerde thumbnails die, zolang bijvoorbeeld de md5sum van de parent niet wijzigt, dezelfde gecachte thumbnail te tonen.

If money talks then I'm a mime
If time is money then I'm out of time


  • DonKui
  • Registratie: November 2007
  • Laatst online: 11-05-2022
In het ergste geval kan je een CRON(Timed Task) aanmaken die een PHP script aanroept die kijkt naar nieuwe afbeeldingen zonder thumb maar dan heb je ze niet realtime (of de job moet je heel vaak runnen maar dat ligt aan het aantal foto's)

  • samo
  • Registratie: Juni 2003
  • Laatst online: 16:03

samo

yo/wassup

Ik heb zelf gekozen voor een proces dat inderdaad uit kan timen, maar in de werkelijkheid dat bijna nooit doet. En dan spreek ik over galleries van 20 tot 50 foto's die van Flickr geladen moeten worden.
Op het moment dat mijn gallery voor het eerst geopend wordt kijk ik of de thumbnails bestaan (in de database en op filesystemniveau) en toont een melding dat er nog een proces bezig is, en in een AJAX-call laadt het thumbnailscript. Vervolgens moet er gerefresht worden om de thumbs ook te zien. Niet netjes maar dat los ik op door zelf de eerste view te doen.

Bekend van cmns.nl | ArneCoomans.nl | Het kindertehuis van mijn pa in Ghana


  • TJVB
  • Registratie: Januari 2008
  • Laatst online: 02-12 11:46
De thumbnails heb je zelf op een server staan?
Wat ik zelf een keer gedaan heb is de pagina meteen de thumbnail te laten aanroepen. Als die niet bestaat wordt die via .htaccess naar een script gestuurd wat de thumbnail genereert, opslaat en laat zien.
De eerste bezoeker genereert dus de thumbnails (per plaatje 1 request die wat trager is dan direct laten zien) de volgende bezoeker krijgt meteen de thumbnail. Hierdoor hoef je niet steeds te controleren of de thumbnail bestaat.

  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 10:36
De lazy view plugin doet al een ajax call om images later te laden. Ik kan alle thumbnail requests natuurlijk door PHP laten afhandelen, waarbij eerst gekeken wordt of er al een thumb is (en of die idd nog courant is) en die serveren, of anders eerste maken, naar file schrijven en direct vanuit php serveren.

Alternatief is een conditional mod_rewrite rule die - indien de thumb nog niet bestaat - deze forward naar bovenstaande php. Dit is neem ik aan lichter, aangezien de meeste requests uiteindelijk direct door apache worden geserveerd in plaats van dat alle thumbs door php heen gaan. Ik ben alleen niet bekend met de gangbaarheid van het meeleveren van een .htaccess.

Dank in ieder geval, jullie hebben me op het goede spoor gezet :)

[ Voor 4% gewijzigd door DaCoTa op 24-07-2013 10:05 ]


  • TJVB
  • Registratie: Januari 2008
  • Laatst online: 02-12 11:46
Eventueel kun je een configuratie instelling maken of het via .htaccess gaat of altijd door PHP.
Ik heb het toen gemaakt voor fotoboek.worldservants.nl , als elk request door PHP moest ging de server op spitsuren onderuit. Nu verveelt die zich.

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Reden dat ik het resizen via ajax wil laten afhandelen ipv .htaccess / php-redirection is dat je dan geen last hebt van browserinstellingen die je server kunnen overloaden.

Als je 10 bezoekers heb binnen 1 seconde en die halen allemaal 8 plaatjes tegelijk op (ik dacht dat dit IE10 / FF default was) dan heb je 80 resize processes op je server lopen (mits er geen plaatje omgezet is) en dat gaat race-conditions geven plus een gigantische server-last. Dit moet je ergens door laten afremmen.

  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 10:36
Zoals gezegd, alle thumbs worden dmv de lazy load plugin als via ajax later geladen, dus de load zal nooit heel hoog worden.

Nadeel van de mod_rewrite is dat ik alleen een conditie kan maken om te kijken of de thumb bestaat, niet of hij nog up-to-date is dmv een timestamp/md5 test. Maar ook daar is mee te leven.
Pagina: 1