[Gfoss] [gfoss] formato vettoriale per memorizzazione foto

a.furieri a lqt.it a.furieri a lqt.it
Gio 12 Maggio 2016 00:45:53 CEST


On Wed, 11 May 2016 14:24:21 +0200, Luca Delucchi wrote:
> 2016-05-11 12:43 GMT+02:00 Roberto Marzocchi 
> <roberto.marzocchi a gter.it>:
>> Sto sbagliando qualcosa o risulta anche a voi?
>
> penso che non sbagli (non ho mai provato), penso che essendo un blob
> non sa come gestirlo, potrebbe essere di tutto. Credo dovresti fare
> qualcosa ad hoc
>

approfittiamo per approfondire un poco, che non fa mai male.

vi siete mai chiesti cosa sia realmente un'immagine digitale
in formato JPEG, o PNG, o TIFF etc ?

in fondo e' semplicemente un mucchiettino di bytes (spesso un
gran bel mucchione), ma ciascun singolo bit dentro a tutti
quei bytes deve essere codificato in modo tale da rispettare
scrupolosamente le specifiche tecniche di quel formato, che
non di rado prevede anche la compressione dei dati.
se anche un singolo byte non e' codificato nel modo giusto
l'immagine risultera' in qualche modo danneggiata, ma e'
anche buone probabile che risulti del tutto illeggibile.

in conclusione, per potere visualizzare correttamente
qualsiasi immagine digitale prima occorre sapere con
assoluta certezza che si tratta proprio di un'immagine,
e che e' stata codificata secondo le regole di un ben
determinato formato.
a questo punto bastera' chiamare la libreria di supporto
appropriata (detta anche codec), ed ecco che da quel
mucchietto di bytes apparira' come per magia una bella i
mmagine sul vostro schermo.
il vero problema quindi e' sapere in anticipo a quale
codec passare l'immagine per l'estrazione.

di norma le immagini vengono memorizzate in files
che stanno sul disco.
un criterio quasi universale e' quello di assegnare
un opportuno suffisso al nome del file, p.es. .jpg
oppure.png
in questo modo qualsiasi viewer capisce immediatamente
gia' dal nome che si tratta proprio di un'immagine
e puo' scegliere facilmente il codec appropriato.

ma non tutte le immagini stanno su un file su disco;
per esempio le immagini scaricate da Internet sono
semplicemente un blocco di dati che arriva giu'
dalla linea di comunicazione.
ma anche in questo caso il browser sapra' sempre che
si tratta proprio di un'immagine, e di quale tipo,
perche' i protocolli del web prevedono sempre
che qualsiasi blocco allegato sia accompagnato da una
dichiarazione MIME type, che puo' essere "image/jpeg"
o "image/png" o magari anche "image/gif".
quindi anche il browser web sapra' sempre in anticipo
quale e' il codec appropriato che deve utilizzare.

e veniamo finalmente ai BLOB memorizzati dentro ad
un DB; in questo caso non c'e' assolutamente nulla
che possa avvertire in naticipo l'applicazione su
come deve essere gestito quel dato BLOB, perche' e'
del tutto anonimo e non qualificato, non ha nome,
non ha mime type, non ha assolutamente nulla che
possa aiutare a capire cosa contiene realmente.

e allora come se ne esce fuori ?
per fortuna esiste una possibile via di uscita:
tutti i formati file prevedono al proprio interno
una specie di "impronta digitale" convenzionale,
che tecnicamente si chiama "magic number".
basta che l'applicazione vada a verificare in sequenza
tutti i magic numbers dei formati che e' in grado
di gestire (un processo che si chiama sniffing, cioe'
"annusatura"), ed ecco che al primo riscontro positivo
sara' ancora in grado di recuperare automaticamente
l'immagine dal BLOB richiamando il codec opportuno.

naturalmente si tratta di una funzionalita' abbastanza
sofisticata che non tutte le applicazioni sono in
grado di supportare, ma alcune ci riescono tranquilamente.
se tu p.es usi "spatialite_gui" vedrai che con il tool
BlobExporer potrei immediatamente visualizzare tutte le
eventuali immagini che avrai caricato nel tuo DB.

per le applicazioni che non sono in grado di
supportare nativamente questo meccanismo si puo'
sempre provare un approccio alternativo.

Come gia' diceva Luca, bastera' semplicemente
sviluppare un piccolo plug-in python che provveda
ad effettuare lo sniffing del BLOB chiamando quindi
il codec appropriato per l'estrazione dell'immagine.
ed ecco che a questo punto anche QGIS sara' in grado
di visualizzare le immagini che tu avrai memorizzato
dentro ai BLOB del tuo DB sqlite.

ciao Sandro


Maggiori informazioni sulla lista Gfoss