In ons systeem willen we de mogelijkheid hebben om serverside afbeeldingen te resizen, croppen e.d. Daarvoor kunnen we via php/gd allerlei bewerkingen uitvoeren. Uitgangspunten zijn:
1) Afbeelding kunnen bewerken
2) Dit efficient kunnen doen (denk aan cache e.d.)
3) De verschillende versies kunnen bijhouden (welke varianten zijn er van afbeelding x)
4) Extra parameters aan afbeeldingen kunnen geven (van een bepaalde set de volgorde bepalen)
Eerste probeersel
Onze eerste oplossing (inmiddels vervangen) voldeet alleen aan #1:
We deden dat via een url als dit: http://domein.nl/img/plaatje.jpg?w=200&cr=1:1. Oftwel: een crop-ratio van 1:1 (vierkantje) met een breedte van 200px. Dat werkte prima, maar alles gaat dus door php. De aangepaste afbeeldingen werden wel gecached, maar alsnog moet het php-scriptje alle losse afbeeldingen zelf serveren.
Tweede probeersel
Onze tweede oplossing (die draait nu, maar moet veranderd worden) voldoet aan #1 en #2, maar onze nieuwe eisen brengen roet in het eten.
Je vraagt een afbeelding op via http://domein.nl/img/resize/w/200/pad/naar/plaatje.jpg. Als het bestand niet bestaat wordt via php uit een map met originelen het bestand gepakt en de nodige bewerkingen toegepast. De afbeelding wordt weggeschreven naar het zojuist aangevraagde pad, dus elk volgend request heb je meteen via apache zelf de afbeelding te pakken (geen tussenkomst van php).
Maar dan heb je bijvoorbeeld verschillende versies (een w/200, w/500, h/350 etc). Hoe weet je vanuit het origineel welke varianten er allemaal zijn, zonder alle folders te scannen op mogelijkheden?
Nieuw probeersel
Tijd dus voor een nieuwe opzet, ditmaal liefst met jullie feedback. Uiteindelijk is het allemaal behoorlijk complex, want je wilt on-the-fly een bepaalde afmeting van een afbeelding ophalen. Deze moet liefst daarna direct opvraagbaar zijn, zonder tussenkomst van php (ook handig voor caching wat apache dan kan afhandelen).
Toch wil je, wanneer je het origineel vervangt, alle varianten daarvan kunnen weggooien om die ook te vervangen (dus je moet kunnen bijhouden welke varianten er allemaal zijn).
En liefst zou je nog van een specifieke subset van afbeeldingen (bijvoorbeeld alle afbeeldingen binnen een project van je portfolio) zaken als de volgorde kunnen bepalen. Er is dus óók meta-informatie die je moet kunnen opslaan. Dat zou per subset in een xml file kunnen, via een database of wellicht op een nog andere manier. Maar met een database krijg je natuurlijk verschillen tussen de entries in je db en de bestanden op je filesystem. Hoe ga je dat weer oplossen?
Ik heb wel verschillende systemen gezien, maar aan alle systemen kleeft een nadeel. Wat zijn jullie ervaringen? Ik zie wel wat in de opzet van ons tweede systeem, maar dan wellicht met een andere directory-structuur en/of koppeling met meta-informatie.
1) Afbeelding kunnen bewerken
2) Dit efficient kunnen doen (denk aan cache e.d.)
3) De verschillende versies kunnen bijhouden (welke varianten zijn er van afbeelding x)
4) Extra parameters aan afbeeldingen kunnen geven (van een bepaalde set de volgorde bepalen)
Eerste probeersel
Onze eerste oplossing (inmiddels vervangen) voldeet alleen aan #1:
We deden dat via een url als dit: http://domein.nl/img/plaatje.jpg?w=200&cr=1:1. Oftwel: een crop-ratio van 1:1 (vierkantje) met een breedte van 200px. Dat werkte prima, maar alles gaat dus door php. De aangepaste afbeeldingen werden wel gecached, maar alsnog moet het php-scriptje alle losse afbeeldingen zelf serveren.
Tweede probeersel
Onze tweede oplossing (die draait nu, maar moet veranderd worden) voldoet aan #1 en #2, maar onze nieuwe eisen brengen roet in het eten.
Je vraagt een afbeelding op via http://domein.nl/img/resize/w/200/pad/naar/plaatje.jpg. Als het bestand niet bestaat wordt via php uit een map met originelen het bestand gepakt en de nodige bewerkingen toegepast. De afbeelding wordt weggeschreven naar het zojuist aangevraagde pad, dus elk volgend request heb je meteen via apache zelf de afbeelding te pakken (geen tussenkomst van php).
Maar dan heb je bijvoorbeeld verschillende versies (een w/200, w/500, h/350 etc). Hoe weet je vanuit het origineel welke varianten er allemaal zijn, zonder alle folders te scannen op mogelijkheden?
Nieuw probeersel
Tijd dus voor een nieuwe opzet, ditmaal liefst met jullie feedback. Uiteindelijk is het allemaal behoorlijk complex, want je wilt on-the-fly een bepaalde afmeting van een afbeelding ophalen. Deze moet liefst daarna direct opvraagbaar zijn, zonder tussenkomst van php (ook handig voor caching wat apache dan kan afhandelen).
Toch wil je, wanneer je het origineel vervangt, alle varianten daarvan kunnen weggooien om die ook te vervangen (dus je moet kunnen bijhouden welke varianten er allemaal zijn).
En liefst zou je nog van een specifieke subset van afbeeldingen (bijvoorbeeld alle afbeeldingen binnen een project van je portfolio) zaken als de volgorde kunnen bepalen. Er is dus óók meta-informatie die je moet kunnen opslaan. Dat zou per subset in een xml file kunnen, via een database of wellicht op een nog andere manier. Maar met een database krijg je natuurlijk verschillen tussen de entries in je db en de bestanden op je filesystem. Hoe ga je dat weer oplossen?
Ik heb wel verschillende systemen gezien, maar aan alle systemen kleeft een nadeel. Wat zijn jullie ervaringen? Ik zie wel wat in de opzet van ons tweede systeem, maar dan wellicht met een andere directory-structuur en/of koppeling met meta-informatie.