bloggers bloggers

Marco Napolitano
Messaggi: 68
Stelle: 0
Data: 15/11/17
Jader Jed Francia
Messaggi: 50
Stelle: 0
Data: 22/09/17
Ezio Lombardi
Messaggi: 9
Stelle: 0
Data: 23/06/17
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
marcello marangio
Messaggi: 4
Stelle: 0
Data: 05/07/13
Marco Mancini
Messaggi: 1
Stelle: 0
Data: 05/06/13
Indietro

Generazione miniature con Liferay 6.1.1

Lavorando con le proprie entity custom può capitare di dover manipolare delle immagini e, come spesso succede, di dover creare delle miniature di tali immagini.

Chiaramente è sempre possibile creare tutto a mano e salvarlo poi nella document library, ma perchè farlo quando Liferay è in grado di farlo al posto nostro?

La soluzione è incredibilmente semplice ma richiede alcune spiegazioni:

ImageProcessorUtil.generateImages(fileVersion);

Innanzitutto... cos'è fileVersion?

Si tratta di un oggetto che contiene alcune meta informazioni sulla nostra immagine (o meglio, sul file generico contenuto nella Document Library) e lo possiamo ottenere nel seguente modo attraverso le classi di utility della Document Library:

DLFileEntry imageDLFileEntry = DLFileEntryLocalServiceUtil....

long fileVersionId = imageDLFileEntry.getFileVersion().getFileVersionId();

FileVersion fileVersion = DLAppLocalServiceUtil.getFileVersion(fileVersionId);

Ecco, questo è tutto il codice che deve essere scritto. Ma poi, cosa succede?

Succede che Liferay ricava da fileVersion tutte le informazioni sull'immagine e tenta di generare 3 distinte miniature: quella di default e 2 custom. Sì ok, ma le dimensioni dove le imposto?

Le dimensioni si possono impostare sovracrivendo alcune property di portale, in particolare:

dl.file.entry.thumbnail.max.height=128
dl.file.entry.thumbnail.max.width=128
dl.file.entry.thumbnail.custom1.max.height=200
dl.file.entry.thumbnail.custom1.max.width=200
dl.file.entry.thumbnail.custom2.max.height=250
dl.file.entry.thumbnail.custom2.max.width=250

Volendo, le dimensioni di default si possono anche impostare direttamente dal pannello di controllo di Liferay, nella sezione Server -> File Upload.

Ricordate che le dimensioni non rappresentano l'altezza e larghezza esatta della miniatura, ma le dimensioni massime ossia quelle del riquadro all'interno del quale verrà visualizzata la miniatura; quindi non ci sono problemi di deformazioni perchè l'immagine viene scalata per rientrare nel riquadro.

Quindi quello che succede è che Liferay va a cercare i valori di queste property e se sono diversi da zero, genera una miniatura per ogni tipo e la salva nella Document Library.

Bello! Ma adesso come le visualizzo? Anche questo è abbastanza semplice!

Innanzitutto dobbiamo generare l'indirizzo completo dell'immagine originale e lo facciamo attraverso le solite librerie di Liferay:

String imageUrl = DLUtil.getPreviewURL(
DLAppLocalServiceUtil.getFileEntry(fileEntry.getFileEntryId()),
null,
themeDisplay,
StringPool.BLANK,
false,
true);

Il significato dei parametri è il seguente:

  1. DLAppLocalServiceUtil.getFileEntry(fileEntry.getFileEntryId()), serve per recuperare dalla Document Library l'immagine;
  2. null, rappresenta la versione del file ma a noi interessa l'ultima e lo mettiamo a null;
  3. themeDisplay, come farselo mancare?
  4. StringPool.BLANK, parametri aggiuntivi della queryString;
  5. false, non vogliamo che nella URL venga aggiunto il numero di versione;
  6. true, vogliamo una URL assoluta.

La chiamata sopra genera una URL simile alla seguente:

http://localhost:8080/documents/15067/28230/filename.jpg/
67979c90-ab51-42ed-b3c8-d3721dfafecd

Inserendo la URL in un browser potremmo vedere l'immagine grande. E la miniatura?

Per visualizzare la miniatura è sufficiente aggiungere un parametro alla URL:

String thumbUrl = HttpUtil.addParameter(imageUrl, "imageThumbnail", 1);

Il parametro imageThumbnail serve proprio a richiedere a Liferay di fornirci la miniatura, e può assumere 3 valori distinti:

  • 1, per visualizzare la miniatura di default;
  • 2, per visualizzare la miniatura custom1;
  • 3, per visualizzare la miniatura custom2.

Ad esempio (lo spezzo per motivi tipografici):

http://localhost:8080/documents/15067/28230/filename.jpg/
67979c90-ab51-42ed-b3c8-d3721dfafecd?imageThumbnail=1

Enjoy!

Precedente
Commenti
Nessun commento. Vuoi essere il primo.