Immagini e video

Alml consente di inserire immagini provenienti da file esterni, oppure incorporando del codice estraneo, con cui queste devono essere disegnate. Eventualmente si può anche fare riferimento a dei video, ma in tal caso non si ha una «incorporazione» vera e propria nel testo.

Gli elementi con cui si possono incorporare delle immagini o dei video vanno usati in un contesto lineare; pertanto, per poter essere usati in un riquadro (object), come se fossero dei blocchi, vanno inserite dentro l'elemento imgblock.

Inizialmente, il modo più semplice per inserire un'immagine è quello di preparare un file in un formato comune a matrice di punti (come può esserlo un formato PNG) e di collocarlo in una sottodirectory rispetto alla posizione in cui si trova il file sorgente SGML. Per esempio, disponendo del file cielo-azzurro.png collocato nella directory figure/; l'immagine si potrebbe incorporare in un testo nel modo seguente:

<p>Mi piace vedere un cielo azzurro come in questa piccola icona: <img
imgfile="figure/cielo-azzurro" height="2cm">. Come vorrei stendermi su
un bel prato ad ammirare tanta bellezza.</p>

Se invece quello che si vuole è mostrare la figura nel riquadro di un elemento object, occorre aggiungere l'elemento imgblock:

<object>
<caption>
    Figura <objectref>. Il cielo azzurro che vorrei ammirare
    stendendomi su un bel prato...
</caption>
<imgblock>
<img imgfile="figure/cielo-azzurro" width="100%">
</imgblock>
</object>

Tutti gli elementi che vengono descritti in questo capitolo per l'inserzione delle immagini, vanno usati in un contesto lineare, oppure, vanno inserite in un elemento imgblock per poter apparire come blocchi in un elemento object.

Tabella u98.3. Elementi SGML che servono a incorporare delle immagini.

Elemento Descrizione
img imgfile="file" [alt="descrizione"]
[height="altezza"] [width="larghezza"]
Elemento vuoto per incorporare un file esterno, indicato nell'attributo imgfile, ma senza estensione. L'attributo alt consente di specificare una descrizione alternativa nel caso non si potesse visualizzare l'immagine; gli attributi width e height consentono di specificare le dimensioni dell'immagine.
embimg [alt="descrizione"] [file="file"]
[height="altezza"] [width="larghezza"]
Elemento per incorporare un'immagine trasformata con l'algoritmo Base64. L'attributo alt consente di specificare una descrizione alternativa nel caso non si potesse visualizzare l'immagine; l'attributo file consente di salvare una copia del contenuto dell'elemento nel file indicato; gli attributi width e height consentono di specificare le dimensioni dell'immagine.
epsimg [alt="descrizione"] [file="file"]
[height="altezza"] [width="larghezza"]
Elemento per incorporare un'immagine in formato EPS letterale. L'attributo alt consente di specificare una descrizione alternativa nel caso non si potesse visualizzare l'immagine; l'attributo file consente di salvare una copia del contenuto dell'elemento nel file indicato; gli attributi width e height consentono di specificare le dimensioni dell'immagine.
figimg [alt="descrizione"] [file="file"]
[height="altezza"] [width="larghezza"]
Elemento per incorporare un'immagine in formato XFig letterale. L'attributo alt consente di specificare una descrizione alternativa nel caso non si potesse visualizzare l'immagine; l'attributo file consente di salvare una copia del contenuto dell'elemento nel file indicato; gli attributi width e height consentono di specificare le dimensioni dell'immagine.
lyimg [alt="descrizione"] [file="file"]
[height="altezza"] [width="larghezza"]
Elemento per incorporare un'immagine in formato LilyPond letterale. L'attributo alt consente di specificare una descrizione alternativa nel caso non si potesse visualizzare l'immagine; l'attributo file consente di salvare una copia del contenuto dell'elemento nel file indicato; gli attributi width e height consentono di specificare le dimensioni dell'immagine.
teximg [alt="descrizione"] [file="file"]
[height="altezza"] [width="larghezza"]
Elemento per incorporare un'immagine in formato TeX letterale. L'attributo alt consente di specificare una descrizione alternativa nel caso non si potesse visualizzare l'immagine; l'attributo file consente di salvare una copia del contenuto dell'elemento nel file indicato; gli attributi width e height consentono di specificare le dimensioni dell'immagine.
lateximg [alt="descrizione"] [file="file"]
[height="altezza"] [width="larghezza"]
Elemento per incorporare un'immagine in formato LaTeX letterale. L'attributo alt consente di specificare una descrizione alternativa nel caso non si potesse visualizzare l'immagine; l'attributo file consente di salvare una copia del contenuto dell'elemento nel file indicato; gli attributi width e height consentono di specificare le dimensioni dell'immagine.
gnuplotimg [alt="descrizione"] [file="file"]
[height="altezza"] [width="larghezza"]
Elemento per incorporare un'immagine in formato Gnuplot letterale. L'attributo alt consente di specificare una descrizione alternativa nel caso non si potesse visualizzare l'immagine; l'attributo file consente di salvare una copia del contenuto dell'elemento nel file indicato; gli attributi width e height consentono di specificare le dimensioni dell'immagine.
eukleidesimg [alt="descrizione"] [file="file"]
[height="altezza"] [width="larghezza"]
Elemento per incorporare un'immagine in formato Eukleides letterale. L'attributo alt consente di specificare una descrizione alternativa nel caso non si potesse visualizzare l'immagine; l'attributo file consente di salvare una copia del contenuto dell'elemento nel file indicato; gli attributi width e height consentono di specificare le dimensioni dell'immagine.
video [src="file"] [title="titolo"]
[artist="artista"] [copyright="condizioni"]
Elemento per fare riferimento a un video, rappresentato dal percorso da indicare con l'attributo src. Il video viene convertito in OGV, ma soltanto nella composizione HTML; tuttavia, se poi segue una composizione PDF, i collegamenti esterni vengono fatti corrispondere agli stessi file OGV.
imgblock
Elemento che può contenere uno o più elementi *img da inserire all'interno in un elemento object.

Dalla tabella appena mostrata si può osservare che esistono degli attributi comuni; in modo particolare height e width. L'attributo height serve a specificare l'altezza dell'immagine, mentre l'attributo width specifica la larghezza. Se vengono forniti entrambi, l'immagine ottenuta dalla composizione rispetta entrambi i valori, pertanto può risultare deformata; se invece si specifica uno solo dei due valori, l'altro viene determinato in proporzione. Le misure vanno espresse nei modi riconoscibili da Alml; per esempio si può scrivere height="5cm", oppure height="50mm", oppure height="1.969in",... Quando si tratta della larghezza (width), la misura può essere espressa anche in modo percentuale, riferendosi allo spazio disponibile. Per esempio, width="100%" richiede la larghezza massima in base al contesto. Logicamente, in condizioni normali è preferibile usare sempre solo l'attributo width con un valore percentuale.

È possibile evitare l'uso di entrambi gli attributi width e height, quando l'immagine contiene delle misure proprie; in tal caso, le misure originali vengono rispettate.

Quando si genera una composizione in formato HTML, le misure devono essere trasformate in punti grafici (pixel). Considerato che mediamente uno schermo grafico viene usato alla risoluzione di 1 024×768, per ogni punto tipografico PostScript (ovvero punti da 1/72 in) si ottengono due punti grafici.

Un altro attributo comune a tutti gli elementi che inseriscono un'immagine è alt, che serve a descrivere brevemente l'immagine. Questa informazione serve nella composizione HTML, per mostrare una descrizione minima in caso di problemi nella visualizzazione dell'immagine.

Quando gli elementi incorporano il codice che rappresenta l'immagine, questo deve essere racchiuso in una sezione marcata di tipo CDATA, per non essere alterato in alcun modo; inoltre, per tali elementi è disponibile l'attributo file, con il quale è possibile salvare, in fase di composizione, una copia di quel contenuto nel file indicato. Il file in questione viene salvato soltanto se la directory di destinazione esiste già e se, oltre ad avere i permessi necessari, non esiste già un file con quel nome.

Immagini esterne

Nella parte iniziale del capitolo sono già apparsi degli esempi di utilizzo dell'elemento img, per l'inserimento di un'immagine proveniente da un file esterno. Come già spiegato, è bene che il file in questione si trovi in una directory differente rispetto a quella in cui si trova il file SGML sorgente.

Il file viene indicato nell'attributo imgfile senza l'estensione, perché vengono tentate automaticamente diverse possibilità, partendo da formati che dovrebbero offrire una qualità maggiore.

Immagini incorporate Base64

Per incorporare un'immagine codificata con l'algoritmo Base64 si può usare il programma Uuencode, oppure Mpack, descritti nella sezione 39.12. Supponendo di utilizzare Uuencode e di volere inserire l'immagine contenuta nel file prova.jpg, basta procedere come segue:

uuencode -m prova.jpg ciao > prova.uuencode[Invio]

Quello che si ottiene in questo caso è il file prova.uuencode, che può apparire simile al testo seguente, che è stato ridotto per comodità:

begin-base64 664 ciao
JSFQUy1BZG9iZS0yLjAKJSVDcmVhdG9yOiAiYmFyY29kZSIsIGxpYmJhcmNv
ZGUgc2FtcGxlIGZyb250ZW5kCiUgJSVEb2N1bWVudFBhcGVyU2l6ZXM6IGE0
...
...
b3cKMTA0LjAwIDEwLjAwIG1vdmV0byAoOSkgc2hvdwoKJSBFbmQgYmFyY29k
ZSBmb3IgIjk5MTIzNDU2Nzg5MCIKCiUlRW5kUGFnZQoKc2hvd3BhZ2UKJSVU
cmFpbGVyCiUlRU9GCgo=
====

Da questo file, ottenuto con Uuencode, va tolta la prima e l'ultima riga; il resto si può inserire in un elemento embimg. Viene mostrato un esempio:

<p>Bla bla bla
<embimg alt="Esempio" width="10%">
<![CDATA[
JSFQUy1BZG9iZS0yLjAKJSVDcmVhdG9yOiAiYmFyY29kZSIsIGxpYmJhcmNv
ZGUgc2FtcGxlIGZyb250ZW5kCiUgJSVEb2N1bWVudFBhcGVyU2l6ZXM6IGE0
...
...
b3cKMTA0LjAwIDEwLjAwIG1vdmV0byAoOSkgc2hvdwoKJSBFbmQgYmFyY29k
ZSBmb3IgIjk5MTIzNDU2Nzg5MCIKCiUlRW5kUGFnZQoKc2hvd3BhZ2UKJSVU
cmFpbGVyCiUlRU9GCgo=
]]>
</embimg> bla bla bla.</p>

Dal momento che si vuole evitare qualunque interpretazione SGML, è necessario racchiudere il contenuto di questi elementi in una sezione marcata di tipo CDATA, così come si può vedere nell'esempio appena apparso.

Immagini incorporate EPS

Si può incorporare codice EPS utilizzando l'elemento epsimg. Viene mostrato un esempio:

<p>Bla bla bla
<epsimg alt="Esempio" width="10%">
<![CDATA[
%!PS-Adobe-2.0 EPSF-1.2
%%Creator: Daniele Giacomini
%%BoundingBox: 0 0 100 100
%%EndComments
50 50 translate
gsave
% Cambia e ruota il piano cartesiano
36  {10 rotate 10 10 moveto 30 30 lineto} repeat
stroke
grestore
showpage
%%Trailer
%%EOF
]]>
</epsimg> bla bla bla.</p>

Nel riquadro successivo si vede il risultato della composizione:

Bla bla bla Esempio bla bla bla.

Durante la fase di composizione, l'immagine viene trasformata in modo appropriato con degli strumenti, che a volte si limitano a considerare, nel codice originario, l'area di un foglio in formato Lettera verticale (8,5 in × 11 in). In questo caso, ciò che esce dai margini del formato Lettera può risultare escluso. Di tale limite è necessario essere consapevoli quando si preparano immagini del genere.

Immagini incorporate XFig

Si può incorporare codice XFig utilizzando l'elemento figimg. Viene mostrato un esempio:

<object id="f-esempio-1">
<caption>
    Figura <objectref>. Esempio con <special special="name">XFig</special>.
</caption>
<imgblock>
<figimg alt="Esempio" width="50%">
<![CDATA[
#FIG 3.2
Portrait
Center
Metric
A4      
100.00
Single
-2
1200 2
2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
         270 225 1755 225 1755 990 270 990 270 225
2 4 0 1 0 17 50 0 -1 0.000 0 0 7 0 0 5
         2745 1395 2745 540 1215 540 1215 1395 2745 1395
4 0 0 50 0 0 12 0.0000 4 180 1350 1845 360 Esempio con XFig\001
]]>
</figimg>
</imgblock>
</object>

Nel riquadro successivo si vede il risultato della composizione:

Figura u98.10. Esempio con XFig.

Esempio

Si osservi che gli strumenti usati da Alml per l'inclusione di questo formato, leggono dal codice originario soltanto l'area corrispondente a un foglio in formato Lettera verticale (8,5 in × 11 in), ignorando il resto.

Immagini incorporate LilyPond

L'elemento lyimg consente di incorporare codice LilyPond. Viene mostrato un esempio:

<object sep="border" id="f-esempio-2">
<caption>
    Figura <objectref>. Esempio con <special special="name">LilyPond</special>.
</caption>
<imgblock>
<lyimg alt="Esempio" width="40%">
<![CDATA[
\version "2.4.0"
\header {
    tagline = ""
}
\score { 
   {c' d' e' f' g' a' b'}
  \layout {
    linewidth = 50
    firstpagenumber = "no"
  }  
  \midi {}
}
]]>
</lyimg>
</imgblock>
</object>

Nel riquadro seguente, si vede il risultato della composizione dell'esempio; si osservi che l'esempio utilizzava, a sua volta, un riquadro bordato:

Figura u98.13. Esempio con LilyPond.

immagine

Nella composizione in formato HTML, in corrispondenza dell'immagine che riproduce il codice musicale di LilyPond, se previsto, si raggiunge il file MIDI corrispondente come riferimento ipertestuale. In pratica, di solito si ottiene di eseguire il brano visualizzato, facendo un clic sull'immagine.

Immagini incorporate TeX e LaTeX

Sono disponibili gli elementi teximg e lateximg per inserire direttamente il codice TeX e LaTeX nel sorgente. Per la precisione, nel caso di teximg vengono aggiunte automaticamente all'inizio due istruzioni, \nonstopmode e \nopagenumbers, inoltre, alla fine viene aggiunta l'istruzione \bye; invece, nel caso di lateximg viene aggiunta l'istruzione \nonstopmode all'inizio e \end{document} alla fine.

Il codice LaTeX che viene inserito deve includere tutto il necessario a funzionare correttamente, ma l'aggiunta dell'istruzione \end{document} in modo automatico non può far male se questa è già stata inserita correttamente.

Segue un esempio riferito all'inclusione di codice TeX, dove si può osservare che non viene specificata la dimensione dell'immagine:

<object id="f-esempio-3">
<caption>
    Figura <objectref>. Ecco una bella formula.
</caption>
<imgblock>
<teximg alt="Esempio">
<![CDATA[
$$ \chi^2 = \sum_{i=1}^N
          \left (y_i - (a + b x_i)
          \over \sigma_i\right)^2 $$
]]>
</teximg>
</imgblock>
</object>

Il riquadro seguente mostra il risultato della composizione:

Figura u98.16. Ecco una bella formula.

Esempio

Segue un esempio simile, realizzato con l'inclusione di codice LaTeX; si osservi in particolare la necessità di definire il tipo di documento e il tipo di pagina più semplice previsto. Questa volta si vuole attribuire una dimensione orizzontale all'immagine:

<object id="f-esempio-4">
<caption>
    Figura <objectref>. Ecco un'altra bella formula.
</caption>
<imgblock>
<lateximg alt="Esempio" width="100%">
<![CDATA[
\documentclass{article}
\pagestyle{empty}
\begin{document}
$$ \chi^2 = \sum_{i=1}^N
          \left (y_i - (a + b x_i)
          \over \sigma_i\right)^2 $$
\end{document}
]]>
</lateximg>
</imgblock>
</object>

Il riquadro seguente mostra il risultato della composizione:

Figura u98.19. Ecco un'altra bella formula.

Esempio

Immagini incorporate Gnuplot

È possibile incorporare codice Gnuplot attraverso l'elemento gnuplotimg, che si usa come gli altri elementi simili. In questo caso, viene aggiunta automaticamente l'istruzione set terminal postscript eps color all'inizio. Segue un esempio:

<object sep="border">
<caption>
    Figura <objectref>. Una figura tridimensionale. 
</caption>
<gnuplotimg alt="2*(x**2 + y**2)*exp(-x**2 - y**2)" width="75%">
<![CDATA[
set grid
set hidden3d
splot [-2:2] [-2:2] 2*(x**2 + y**2)*exp(-x**2 - y**2)
]]>
</gnuplotimg>
</object>

Nel riquadro successivo, appare il risultato della composizione; si osservi che l'esempio utilizzava, a sua volta, un riquadro bordato:

Figura u98.22. Una figura tridimensionale.

2*(x**2 + y**2)*exp(-x**2 - y**2)

Osservazioni sull'incorporazione di codice estraneo

Quando si va a incorporare codice esterno, come si fa per esempio con gli elementi lateximg, figimg, lyimg,... è importante evitare di lasciare il codice ASCII <HT>. In pratica, una volta inserito il codice nel sorgente SGML, conviene «espandere» il sorgente stesso in modo che anche i caratteri di tabulazione siano trasformati in spazi normali. L'esempio seguente dovrebbe essere sufficientemente chiaro così:

expand < prima.sgml > dopo.sgml[Invio]

Un altro aspetto da considerare è la codifica: se questo codice che si inserisce contiene caratteri che corrispondono a punti di codifica oltre U+007F, ovvero oltre la codifica ASCII pura e semplice, si possono creare dei problemi, che consistono nel non ottenere esattamente gli stessi caratteri di partenza.

«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net