Skip to content

Image resizing - AWS Lambda #1

@jelen07

Description

@jelen07

Inspirace

Todos

  • 🆕 Update Lambda to work on Node 8.1, Node.js 6.10 will soon be EOL
  • Upravit lambda funkci aby zachovávala formát dle pf:1 parametru dle obrázku (dlé přípony?)
  • V případě jakékoliv chyby aby vrcela info o chybě a ne {"message": "Internal server error"}
  • Vracela noimage v případě, že originál neexistuje
  • Ověrovat pixel density jen když je nastaveno přes Environment variables + napojit do ModifierFactory (aktuálně je to tam duplicitně)
  • Ověřovat resolutions jen když je nastaveno přes Environment variables
  • Metoda modifier.getOriginalUri() je primitivní string replace, otázkou jestli by se spíše neměla skládat
  • Rozdělit alespoň do 2 souborů?
  • Dopočitávát druhý rozměr, pokud je zadaný jen jeden
  • V případě že je zadaný jen jeden rozměr, ověřovat width resp height z povolených resolutions. Dívá se jen na zadaný rozměr, ne kombinaci width x height
  • getParsedValue() nevim jestli je uplně šťastné
  • Command který promaže všechny resiznuté obrzky - ponechá jen originály. Může brát v potaz ještě parametr path, ať se dají smazat jen konkrétní "zmenšeniny". Ideálně to udělat interaktivní: Do you want to delete 101 images in files-stage.sexr.cz/flag/* path?
  • Přidat podporu "debug" modu. Když ručně přidám do url nějaký parametr, např. debug=1, nevygeneruje se náhled, ale vypíšou se detailní informace o stavu - požadované rozlišení, realné, povolené rozlišení, url ap. Zkrátka co nejvíce informací. možnost volat i bez obrázku. Globalně by se to mělo dat vypnout v lambdě.
  • Generovat thumby s offsetem (uživatel si definuje posun per obrázek v jedné ose a udělá se čtvercový thumb)
  • 🆕 Snížení kvality při ukládání obrázku tak, aby byl nejlepší pomer kvalita/velikost https://github.com/imagemin/imagemin
  • Vyhodit quality do ENVu
  • Deploy lambdy
  • Rozsekání do repositářů
  • Dokumentace
  • Článek (PR)

Požadavky na Lambdu

  • Generování thumbů on the fly
  • Vygeneruje náhled o potřebných rozměrech (320x640, 90x90, ...)
  • Umí vygenerovat náhled s offsetem (je-li nastaven)
  • Mazat soubory na které se nešáhlo, např. víc jak 1 rok (požadavek spíše na S3)

Požadavky na aplikaci

  • Upload obrázků na S3
  • Manipulace s uživatelskými obrázky (otočit doleva|doprava|horizontálně|vertikálně)
  • Po jakékoliv manipulaci s obrázkem by mělo dojít k odstranění všech miniatur daného obrázku
  • Odstranit
  • Nastavit jako avatar (hlavní)
  • Nastavit cover (vedlejší)
  • Vegenerovat URL obrázku bez použítí AWS S3 service
  • Podpora pixel density [1, 2, 3, 4], desetiny budeme zaokrouhlovat nahoru 1.5 => 2 a budeme jí řešit pomocí img atributu srcset s dp parametrem viz link
  • Makro pro generování obrázku v potřebném rozměru n:img="$poi->getAvatar()->getSource(), imageManager". Pro upřesnění - ještě u elementu img exituje atribut sizes, ten byl ale prozatím přeskočil, později by mohl být jako další parametr v onom makru. Atribut srcset je vesměs jasný, zatím co sizes bude záležet na konkrétním use case, jestli se nepletu. Toto si doplníme. smashingmagazine, vzhurudolu

Otázkou je, jestli se držet aliasů nebo rozměrů. Tak či tak musí jít a fyzické soubory. Např. pixel density nelze předat jako GET parametr, ale musí být v URL.

Měla by být zachovaná adr. struktura jako doposud (snad to půjde v rámci lambdy), tj.:

  • <bucket>/poiDocument/<id>/<original|size>/<filename> a
  • <bucket>/<what>/<original|size>/<filename> pro statické obrázky (vlajky, noimage ap.)

Čili URL pak můžou být v jednom ze tvarů:

  1. <bucket_url>/poiDocument/<id>/avatar/<filename>, pro pd pak avatar_2, avatar_3 a avatar_4
  2. <bucket_url>/poiDocument/<id>/90x90/<filename>, pro pd pak 90x90_2, 90x90_3 a 90x90_4 A NEBO 180x180, 270x270 a 360x360

Pros

  • Obrázky máme mimo aplikaci, později by se mohl upravit i upload ať to nejede přes PHP, ale rovnou na S3
  • "On the fly" generování obrázků
  • Nemělo by se šahat na AWS S3 službu při vykreslování HTML tagu pro obrázky (v PHP)

Cons

  • Fully dependent on AWS

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions