Ciao, Io sono Michele Hecht,
E Io sono Qui Oggi A parlare A Voi Di importazione binario dati In JMP usando JSL.
Io sono SU IL squadra Quello si sviluppa IL software per JMP, E andiamo Ottenere iniziato.
JMP Potere importare molti Di diverso formati di file,
qualunque cosa da testo normale A Eccellere fogli di calcolo.
Quando quelli Sono importato in JMP, loro sono mostrato A Voi COME a dati tavolo
Quello Voi Potere Poi utilizzo per ulteriore analisi con Tutto Di JMP capacità.
Ma Che cosa Se c'è a dati tipo Quello Voi non posso importare?
JMP non lo fa Sapere Come A Fare Esso.
In Questo caso studio, Malato Essere guardare A IL Formato JPEG immagine formato
Quello È bello comune tra Tutto digitale telecamere E smartphone.
Io sono Sicuro di tutti familiare con Esso.
In fatto, Voi Potrebbe Essere detto,
Aspettare a minuto, I Pensiero JMP Potere aprire JPEG,
E In fatto, Esso Potere aprire a JPEG.
Ma Quando Esso fa, Voi Ottenere UN immagine Piace Questo.
Ma c'è Di più In Quello Formato JPEG di Appena IL immagine.
Per esempio, Se I Ottenere informazioni SU Questo,
I Vedere Che cosa Tipo Di dispositivo IL immagine era preso con, Che cosa lenti erano usato,
E Anche IL GPS coordinate Di Dove I era in piedi Quando I preso IL foto.
Ora, Come Potere Noi Ottenere Quello dati importato in JMP?
BENE, Noi Potere Fare Esso Attraverso JSL,
Quale Malato Ottenere A In Appena a minuto.
Ma Se Noi aprire Questo file In a testo editore, Noi Vedere Quello suo non umano leggibile testo.
Suo a serie Di byte Quello Sono mostrato COME questi non stampabile caratteri,
E Noi chiamata Quello binario dati.
Suo dati questo è al di fuori IL allineare
Di normale alfabetico testo.
Esso ha a struttura, Anche se, E IL dati È bloccato dentro Là.
Se soltanto Noi Potere determinare Come A svelare Esso.
A Fare Quello, Noi Bisogno A Sapere
IL specificazione di come questo dati È posato fuori.
In IL caso Di JPEG, questo è definito di a specificazione
chiamato Exif O Intercambiabile Immagine File Formato,
E Noi Potere scaricamento IL specifiche per Esso.
Suo a documento questo è stato in giro da circa 20 anni,
E suo In utilizzo di Tutto IL dispositivi Quello produrre JPEG.
Non soltanto hardware dispositivi Piace telecamere,
Ma Anche Photoshop mette metadati In a Formato JPEG In Questo Exif formato.
A accesso Esso da JMP,
Noi Bisogno A utilizzo a JSL oggetto conosciuto COME IL BLOB O Binario Grande Oggetto.
Questo È Appena a JSL oggetto Quello tiene a sequenza Di byte.
Come IL nome dice, Quello sequenza Di byte Potere Essere grande.
Noi Potere In realtà creare a BLOB caricando il contenuto
Di Qualunque file SU tuo difficile disco dentro usando Questo Carico T esterno File funzione.
Normalmente, Quello volevo ritorno IL contenuto Di a file COME testo,
Ma Se Noi aggiungere Questo BLOB parola chiave COME a secondo parametro,
Poi IL funzione ritorni a MACCHIA.
Noi Potere Prendere uno BLOB E sottoinsieme a parte di esso
in un altro BLOB usando Sbirciatina BLOB Piace Voi Vedere Qui.
Questo È prendendo 50 byte da B, di partenza A offset 100.
Ora IL offset per BLOB È sempre partendo da zero,
COSÌ IL Primo byte In IL BLOB È UN offset zero.
Ora Noi Potevo Fare Entrambi Di quelli operazione in una singola chiamata di funzione
di passando IL offset E lunghezza come parametri
A IL BLOB parola chiave Quando Noi chiamata Basso testo file.
Se Voi Vedere Qui Quello dice, aprire IL file in questo percorso,
saltare 100 byte In E quindi leggi 50 byte, E ritorno Quello COME a MACCHIA.
Una volta Noi Avere a BLOB,
Noi Potere convertire Esso A a carattere corda usando IL Macchia A Char funzione.
Qui erano prendendo b2 E conversione i suoi byte in a carattere corda,
supponendo Quello quelli byte Sono In IL " set di caratteri "us-ascii".
Se Noi non specificare a set di caratteri, JMP presuppone suo UTF-8 .
Noi Potevo Anche considerare Quello BLOB
A contenere a serie Di numerico valori, Tutto Di IL Stesso tipo E misurare.
Utilizzo Macchia A Matrice Qui, erano prendendo b2,
Quale Noi Leggere In E impostato essere una lunghezza di 50 byte,
E interpretariato Esso COME UN vettore Di non firmato numeri interi,
ogni Di Quale È due byte lungo.
Noi Dovrebbe Ottenere Indietro a matrice con 25 numeri In Esso.
Ora Quello quarto parametro, IL corda "grande,"
dice Quello quelli non firmato numeri interi sono dentro grande endian formato,
Senso IL Primo byte È IL maggior parte significativo,
È IL parte più alta della fine,
E Poi seguito di IL più basso parte Di IL FINE.
Noi Potevo Anche specificare IL corda poco A specificare little endian formato.
Binario file Avere
Entrambi Di questi tipi Di rappresentazione Di numeri interi E altro numeri.
In fatto, IL Exif formato usi Entrambi big-endian E piccola-e intenso.
Andiamo Prendere a Aspetto A questi operazioni In azione.
Io sono andando A interruttore Sopra A JMP,
e io sono andando A aprire Questo dimostrazione sceneggiatura qui, D emo numero 1.
Ora Noi Vedere Alcuni Di IL codice Noi Appena guardato A.
Qui Noi Sono caricamento a testo file, Questo file nominato Spiaggia.j piolo.
Questo È IL Stesso file Quello I usato In Mio diapositiva.
Suo Giusto Qui E Voi Potere Vedere Esso.
Voi Potere Anche Vedere Quello ha una dimensione Di Di 3.4 Me.
Quando I correre Questo uno linea Di codice
E tronco d'albero, Esso racconta Me Quello
b era assegnato a BLOB di 3,45,000, E cetera byte, O 3.4 Me.
Esso non lo fa spettacolo Me Tutto quelli byte, Ma I Potere Vedere Come grande Esso È.
I Potere Ottenere Quello lunghezza usando IL Funzione di lunghezza,
Appena Piace Voi utilizzo per carattere stringhe.
Ma Quando I utilizzo Lunghezza SU a BLOB, Esso dà Me Indietro IL numero Di byte.
I Potere
Ottenere a sub- BLOB Di IL Primo sei byte
In b usando Sbirciatina BLOB.
BENE Fare Quello Qui,
E I Vedere a BLOB Di sei byte era assegnato.
I Potere In realtà Aspetto A IL valore Se I Volere di Appena
invio IL nome Di IL variabile.
I Potere Vedere Qui Sono quelli sei byte In Questo formato "ascii-hex"
FF-D8-FF-E1, E ecc.
I Potere Prendere questi sei byte E convertire loro A a matrice,
E Io sono andando A convertire loro A a matrice Di due byte intero senza segno
O pantaloncini In grande-e intenso formato.
Dato Quello Là Sono sei byte Qui,
I Dovrebbe FINE su con a matrice Di tre numeri.
Quando I correre Questo, Sicuro Abbastanza, c'è Mio tre numeri.
Noi Potere Vedere quelli tre numeri In Esagono
solo per verificare con Questo poco quattro ciclo continuo Quello I ha scritto, COSÌ andiamo Fare Quello.
Là Essi Sono, Appena Stesso COME Prima, FFD8, FFE1, 0982.
COSÌ Ora, andiamo Aspetto A IL Prossimo quattro byte seguente quelli sei In IL file,
E BENE Ottenere loro In a sub- BLOB tutto da loro stessi
COSÌ Quello Noi Potere Poi convertire th In A a carattere corda usando BLOB A Car.
Quando I correre Questo, Io ottengo IL carattere corda " Exif."
Voi Maggio Avere notato In la diapositiva
mostrando IL binario file contenuto
Quello Quello poco corda era su Là vicino alla cima,
E suo parte Di IL Exif file specifica e identifica Esso COME come.
Andiamo andare Indietro A le diapositive.
Quelli funzioni Sono potente.
Essi permettere noi Fare Che cosa Noi Bisogno A Fare A manipolare E Leggere dati da a BLOB,
Ma loro sono a poco ingombrante A utilizzo.
Andiamo scrivere Nostro Proprio servizi di pubblica utilità A Fare loro a morso Di più gestibile.
Io sono andando A inizio con a funzione che ho chiamato Leggi valore
E Esso prende a BLOB E Poi Alcuni offset all'interno di quel BLOB,
E Poi IL numerico tipo Voglio leggere E IL misurare Di Quello tipo.
Suo andando A Leggere uno valore fuori Di IL MACCHIA.
I passato Mio BLOB E offset E misurare in BLOB Peek,
Ottenere Indietro a sub- BLOB Di Appena quelli byte, E Poi chiamata Macchia A Matrice
passando In IL tipo.
I utilizzo IL Stesso misurare,
COSÌ IL misurare Di IL BLOB E IL misurare Di UN elemento Sono IL Stesso.
I Dovrebbe Ottenere Indietro a matrice Di un valore
E I passaggio In "grande" Perché Io sono Appena Sempre andando A utilizzo big-endian formato.
Ma I non Volere A restituire un matrice.
I Volere A ritorno Quello uno valore, COSÌ I tiro Esso fuori Di IL matrice E ritorno Quello.
Questo È chiamato Piace COSÌ. I chiamata Leggi il valore, I passaggio In B.
I Leggere uno intero senza segno di partenza A offset zero
E suo due byte lungo E I Ottenere Indietro Quello valore FFD8.
C'è a problema con Questo codice però, E questo è In Questo parametro B.
B È Quello BLOB questo è 3.4 A In misurare.
IL problema È Quello JSL, Quando passando a BLOB A a funzione,
Sempre passaggi Esso di valore, Senso Esso fa a copia Di Esso.
Per ogni separare numero I Volere A tirare fuori Di Mio BLOB usando Questo funzione,
Esso Volere Fare a copia Di Quello 3.4 A
solo per tiro fuori due byte, O quattro byte o qualunque cosa, E Poi gettare Esso lontano
quando il funzione rendimenti.
Questo è inefficiente, dispendioso, E probabilmente Veramente lento,
COSÌ Noi non Volere A Fare Quello.
Come Potere Noi Ottenere in giro Quello?
BENE, Invece Di passando Esso COME a parametro, andiamo Mettere Esso In a globale.
BENE Fare a globale Quello Noi carico con il nostro BLOB,
E Poi Noi Potere chiamata IL funzione
E lo farà Appena fare riferimento A IL globale Invece Di a parametro.
In fatto, Noi Potere Fare a grappolo Di globali.
Noi Potere documentazione IL lunghezza Di IL BLOB A offset
A Dove Noi Sono attualmente elaborazione dati In IL BLOB,
E Forse Anche per IL endianità.
IL problema con globali, Anche se,
È Quello Essi Sono In IL globale tabella dei simboli,
E Essi Potrebbe interferire con altro codice Quello Voi Avere.
In fatto, noi avremmo Piace A scrivere Nostro importazione codice COME qualcosa Quello Potere Essere usato
di altro clienti,
E quelli clienti Potrebbe Avere loro Proprio variabili di questi nomi,
O Essi Potrebbe Essere usando altro codice biblioteche Quello volevo interferire.
Come Fare Noi Ottenere in giro Quello?
BENE, Io ho Fatto Esso di creazione a spazio dei nomi.
I chiamata Mio spazio dei nomi " Analizzatore EXIF"
Ora, Invece Di globali, I Mettere loro Tutto COME variabili all'interno del mio spazio dei nomi,
E Ora loro sono N spazio aereo globali con Quello prefisso.
Prima I chiamata Mio funzione, I Bisogno A inizializzare loro.
Malato carico IL "Spiaggia.jpeg" file in IL EXIF P arser BLOB,
Malato documentazione suo collegamento.
Malato inizio spento Mio offset A IL molto inizio A zero,
E Malato impostato IL endianità A "grande,"
E Poi I Potere modifica Mio funzione, semplificando Esso a morso Piace Questo.
Ora, Io ho In realtà Mettere Mio funzione nello stesso namespace Leggi valore
COME parte Di IL EXIF Analizzatore spazio dei nomi.
Ora, Tutto I Bisogno A Fare È passaggio a tipo e dimensione.
Sbirciatina BLOB Ora usi IL BLOB globale questo è immagazzinato In IL spazio dei nomi,
IL corrente globale offset che stiamo leggendo,
E BLOB IL matrice Anche usa l'endianità,
COSÌ Noi Potere parametrizzarlo, Noi Potere modifica Esso.
Una volta Io ho recuperato IL risultato I Volere,
Malato incremento IL offset di IL numero di byte
Noi Appena processo, E Poi Malato ritorno Esso COME Prima.
Andiamo Vedere Che cosa Quello sembra Piace In azione.
Noi guarderemo A Dimostrazione 2
E ecco Mio spazio dei nomi.
Qui Sono Mio globali In Quello spazio dei nomi.
Ecco qui IL Leggi il valore funzione, Appena Piace Noi sega.
Io ho avuto Alcuni Di più funzioni. Io ho Mettere UN Analizzatore EXIF
Ecco qui Leggi breve, che causa solo la lettura del valore,
Ma Esso Sempre passaggi non firmato intero Di due byte.
Allo stesso modo, Leggere Lungo legge E non firmato interno Di quattro byte.
Io ho Anche avuto Leggere Ascii che lo passi a misurare In byte
E Esso fa a sub- BLOB Di Quello molti byte
A IL attuale offset da IL BLOB globale,
E Poi causa BLOB A carica A convertire Esso in a corda.
Suo usando IL carattere "us-ascii" impostato,
Perché questo è IL set di caratteri Quello IL Exif specificazione dice
tutti suo carattere dati usi.
Poi Appena Piace con Leggi il valore, Esso incrementi A offset passato IL byte
Quello erano Già elaborato E ritorni IL corda.
Andiamo invia Tutto Di Questo codice
COSÌ Quello quelli cose Sono Tutto definito E Poi Noi Potere Tentativo A utilizzo loro.
Primo, BENE inizializzare Nostro EXIF P arser globali,
E Poi Malato Leggere IL Primo tre pantaloncini da IL file Appena Piace Noi fatto Prima.
Ma Ora, Io sono andando A chiamata Leggi brevemente.
Erano di partenza Esso spento A zero,
COSÌ Io sono andando A chiamata Esso tre volte In Questo ciclo continuo.
Esso Volere Leggere In ogni successivo corto,
avanzando offset COME Esso va, e poi stampare loro fuori Appena Piace Prima.
Là Essi Sono.
Ora, Nostro offset È seduta A offset sei Appena passato IL scorso cosa Esso Leggere.
I Potere chiamata Leggi Ascii per quattro byte E I Ottenere Indietro Quello Stesso corda.
Va bene, COSÌ andiamo andare Indietro A diapositive.
Ora, Noi Avere Alcuni utensili Noi Potere utilizzo A inizio edificio Nostro Analizzatore EXIF.
Noi Bisogno A Voi in IL specifiche
A Vedere Che cosa fa IL EXIF dati formato E Questo Formato JPEG file Aspetto Piace.
BENE, A IL superiore livello, Esso sembra qualcosa Piace Questo.
Esso inizia con due byte, Quale Sono cosa c'è chiamato IL inizio Di immagine marcatore.
Noi abbiamo Già visto quelli due byte.
Loro sono IL valore FFD 8.
Se tuo file non lo fa cominciamo con quello, suo non a JPEG.
Poi c'è a serie Di blocchi Di dati,
E ogni bloccare inizia con due byte, Quale È a marcatore,
Poi due byte, Quale È a misurare,
E Poi Alcuni dati Quale È Tuttavia molti byte IL misurare Di Là erano.
Ora IL misurare Anche include si, COSÌ Veramente IL dati È misurare meno due.
Voi Potere Vedere Là, Sono a gruppo di diversi tipi di blocchi definiti,
Ma Alcuni Di loro Sono opzionale, Alcuni Di loro Potere Essere ripetuto.
IL quelli Quello Noi cura Di Sono APP1 E APP2.
Questo è Dove IL EXIF dati Volere Essere.
Poi c'è a grappolo Di altri Quello Noi non cura Di.
Infine, Noi Vedere uno chiamato Inizio Di Scansione O SOS.
Quando Noi colpo Quello, Noi Sapere Quello IL Prossimo parte Di IL file
Volere Essere IL attuale immagine dati, Quale È IL pixel.
Quando Noi colpo Quello, Noi Potere fermare.
Poi Dopo IL immagine dati È FINE Di immagine.
Noi Bisogno UN algoritmo A Leggere Questo dati.
Ecco qui Che cosa BENE utilizzo.
Primo, BENE Leggere IL Primo due byte,
Vedere Se Esso fiammiferi IL inizio Di marcatore di immagine,
E Poi Noi Sapere Noi Avere a JPEG.
Poi BENE Avere a Mentre ciclo, dove all'interno del ciclo while
ogni tempo Attraverso, BENE processo a separare bloccare.
A Fare Quello, Noi Volere salva IL attuale offset posizione,
Leggere IL due byte per IL Prossimo marcatore,
E Se Quello marcatore È SOS, Noi Potere rottura fuori Di IL ciclo continuo.
Prossimo, Noi Leggere IL due byte per IL misurare.
Ora Noi Avere Tutto IL informazioni Noi Bisogno A processo IL bloccare.
Qualunque cosa Quello comporta, BENE Fare Esso.
Poi Noi Potere saltare passato IL dati In caso di elaborazione del blocco
non l'ha fatto modifica il nostro offset in assoluto, Ma BENE esplicitamente spostare il nostro offset
A Qualunque cosa Esso era A IL inizio Di IL ciclo continuo,
più IL due byte per IL marcatore, più IL valore Di IL bloccare misurare.
Quando Noi Ottenere fuori Di IL ciclo continuo,
Noi O corso fuori Di dati In IL bloccare A processo O Noi colpo Quello sos marcatore,
COSÌ erano Fatto.
Andiamo Vedere Che cosa Quello sembra Piace.
Dimostrazione 3 ha Questo codice.
Voi Vedere, Noi Avere Nostro spazio dei nomi, E Tutto Questo È IL Stesso COME Prima.
Io sono andando A correre Esso Appena A assicurarsi qualunque cosa È definito.
Ora, erano aggiungendo a nuovo funzione,
Quale Io ho Anche Mettere In IL spazio dei nomi,
E suo chiamato Parser EXIF: Ottieni dati EXIF grezzi,
E Io sono passando In IL sentiero A IL file, quel JPEG file Quello Noi Volere A processo.
Ora, Io ho definito UN associativo vettore Qui Quello mappe quelli magia marcatore codici
A loro abbreviazioni così che possiamo stampa loro fuori SU IL tronco d'albero.
I carico su Mio
Exif Analizzatore globali Piace Prima,
soltanto Ora Io sono passando In IL file sentiero Quello I era dato,
E Poi I inizio interpretariato Che cosa IL dati È.
Primo, I Aspetto A IL molto Primo corto
E Fare Sicuro è all'inizio Di immagine marcatore.
Se non, I Appena ritorno Perché suo non a JPEG file.
Io sono andando A scrivere A IL tronco d'albero Quello I sega Esso A offset zero.
Poi ecco Mio Mentre ciclo continuo A camminare Attraverso quelli blocchi.
A IL superiore Di IL ciclo continuo,
Io sono andando A reset Mio endianità A "grande," Perché Alcuni Di IL blocchi,
Quando Noi processo loro, Volere Avere loro Proprio endianità
E modifica Esso A poco.
Noi Volere A Sapere Quello IL l'endianità è grande A IL cima del ciclo
Perché IL bloccare struttura Sempre usi big-endian dati.
Poi Io sono andando A salva Qualunque cosa IL attuale offset È,
E Poi Io sono andando A Leggere IL Prossimo marcatore.
Suo a corto, E Id Aspetto A Vedere Se suo pari A SOS,
Quale È Quello magia numero.
Se Esso È, I Potere rottura fuori Di IL ciclo continuo Dopo registrazione Quello I sega Esso.
Prossimo, Malato Leggere IL due byte per la dimensione del blocco,
E Poi I Volere processo IL bloccare.
Ora, In Questo esempio, Mio elaborazione consiste Di scrivere a messaggio A IL tronco d'albero,
COSÌ Malato Fare Quello.
Poi Io sono pronto A saltare passato IL bloccare.
I Fare Quello di cambiare Mio offset A Essere Qualunque cosa Esso era A IL inizio,
più IL due byte per IL marcatore, più IL bloccare misurare.
Quando I rottura fuori Di IL ciclo continuo, I reset Mio globale sabbia Io sono Fatto.
Andiamo definire Quello funzione di invio Questo.
io correrò sceneggiatura, E Poi I può chiamarlo passando In "Spiaggia.jpg,"
vediamo Che cosa Noi Ottenere.
Esso stampato fuori A IL tronco d'albero.
Esso offset zero, c'è inizio Di immagine, Poi Esso offset due, c'è APP1,
E Esso ha Questo misurare 2.466 byte.
Poi Noi Ottenere APP2, Quale ha Di 30K Di dati.
Questo è maggior parte Di Esso Giusto Là.
Poi Noi Avere a grappolo Di blocchi Quello non ci interessa davvero,
Ma infine, Noi Vedere sos COSÌ Noi rottura fuori Di IL ciclo continuo.
Questo è Tutto lavorando BENE.
Andiamo andare Indietro A diapositive.
Ora, Io sono andando A saltare avanti In elaborazione Alcuni Di Questo file formato
Appena per IL scopo Di tempo.
Ma Se Voi scaricamento IL carta questo è associato con Questo parlare,
IL pieno codice È Là E tanto Di più dettaglio.
I altamente raccomandare Quello Voi Fare Quello,
Ma Io sono andando A darti a gusto Di Esso Qui.
Che cosa Noi Fare Prossimo È Noi processo ogni Di quelli blocchi Quello Noi Avere Leggere,
E Alcuni Di loro Noi Potere ignorare.
Noi Volere A filtro fuori IL blocchi Quello Fare non contenere eccesso dati.
Poi IL quelli Quello Fare, Noi Bisogno A Fare suo Proprio analisi.
Che cosa noi abbiamo scoperto Quando Noi Aspetto in IL Specifiche Exif
È Quello questi blocchi contenere loro Proprio insieme di blocchi di dati
chiamato Immagine F con Elenchi O IFD.
Poi quelli contenere individuale metadati informazioni
con tag detto Che cosa IL i dati sono
E Poi Che cosa formato suo In, E Poi IL dati si.
Noi Volere A raccogliere Tutto Di quelli cose insieme in questi liste.
Ci sarà Essere liste Di liste Di liste, a un po' complicato dati struttura.
Ma IL lista dati struttura È molto generico
E JMP E Potere Presa Tutto tipi Di dati, COSÌ questo è Che cosa Noi Volere A utilizzo.
Lo farà Avere quelli metadati elementi etichettato
con questi numerico valori Quello Noi chiamata IL crudo tag,
Ma Noi Volere A sostituire quelli
con attuale umano leggibile etichette Quello identificare Che cosa Essi Sono.
Andiamo Aspetto A Questo E JMP, E Malato Aspetto A Dimostrazione 4 .
Ora, A Questo punto,
I Avere preso Tutto Mio codice In IL "Parser EXIF" spazio dei nomi
E Mettere Esso in suo Proprio file.
Ora Dimostrazione 4 È a cliente Di Mio codice, Quale È un "EXIF Parser.jsl."
I Potere Appena includere Quello.
Ora, IL funzione Quello ottiene IL dati,
I Potere chiamata Esso passando In IL nome Di IL jpeg file.
Ora Io ho esteso Questo funzione In Qui in realtà processo quelli blocchi,
e romperli giù, filtro fuori IL quelli Quello Sono non EXIF
Tutto IL cose Noi Appena parlato di, E Dare noi Indietro Quello dati struttura.
Andiamo correre Questo E Vedere Che cosa Noi Ottenere.
BENE, Noi Ottenere a quantità Di numeri, Alcuni stringhe.
Voi Vedere, Questo È In liste entro elenca qui,
E c'è UN più esterno lista,
E Poi Esso contiene diverso elementi Quale Sono liste.
Ogni Di quelli Avere questi coppie Di valori.
C'è a numero Quale È IL crudo etichetta, E Poi IL valore.
Questo quelli a corda. Questo uno È Anche a corda.
Questo quelli a numero. Questo quelli a matrice.
IL dati Potere Essere diverso tipi, Ma IL tag Sono Tutto numeri.
Che cosa Noi Volere A Fare Prossimo È convertire quelli numeri in umano leggibile elementi.
In fatto, Questo Totale lista,
Noi Volere A convertire Esso in UN associativo vettore Quello indici IL dati di chiavi.
IL Primo cosa Io sono andando A Fare
è definito a mappatura da questi numeri al umano leggibile chiavi Noi Volere A utilizzo.
Questo è In Questo lungo associativo vettore Giusto Qui.
Ora, Io sono In realtà usando IL Esagono valori per le chiavi,
Perché questo è Come sono specificati In IL Specifiche Exif,
E Esso fa Esso Più facile A seguire lungo Quando tu sei guardare A IL specifiche.
C'è a grappolo Di quelli,
E Io sono andando A inizio A IL in basso e risalire.
Giù Qui A Questo funzione, Etichetta Crudo Dati.
I passato In Questo Totale dati struttura da cui siamo tornati analisi IL MACCHIA.
Ecco qui IL definizione Di Etichetta Crudo Dati.
Io sono andando A ritorno
a lista COME Mio risultato,
COSÌ Io sono andando A camminare Attraverso IL lista COME Mio ingresso E utilizzo Esso
A costruire su IL risultato lista.
I utilizzo Questo Per Ogni costruire, Quale È a nuovo moderno Funzione JMP
Quello passeggiate Attraverso a lista, E per ogni elemento Di IL lista,
Esso tira Quello fuori in Questo variabile crudo exif, che Malato passaggio A Questo funzione.
Poi I Volere A aggiungere Esso A Mio risultato. I Fare Quello usando Questo Inserire In linea.
Io sono inserimento Esso A IL FINE Di risultato, E I Avere A utilizzo Valutazione Lista A superare
qualcosa Quello JMP È facendo A Essere utile con lista creazione.
Ancora, c'è Di più dettaglio Di Questo cose In IL carta.
Suo Di valore scaricamento E controllo in.
Ma per Qui, erano Appena andando A Aspetto A IL chiamata A Etichetta EXIF,
E questo è Giusto su Qui.
Etichetta EXIF È andando A Fare a simile cosa
Dove suo andando A camminare Attraverso ogni Di questi etichetta valore coppie.
Invece Di ritorno a lista, sta andando A ritorno UN associativo vettore.
Qui, Noi Sono inizializzazione dei risultati A Essere UN socio vettore.
Questo è Che cosa Questo gettone significa.
Suo UN vuoto associativo vettore, E Poi BENE ritorno Esso A IL FINE.
BENE Anche utilizzo per ogni A camminare attraverso la lista,
E Noi Sapere Quello ogni crudo articolo È andando A Essere a lista Di due elementi.
Noi Ottenere IL Primo elemento,
Quale È IL crudo etichetta, e poi il secondo l'elemento è IL dati.
Noi semplicemente costruire su la nostra associazione vettore di aggiungendo
UN articolo digitato di IL crudo etichetta con IL valore Di IL dati.
Bello semplice, tranne Noi non voglio IL chiave A Essere IL crudo etichetta.
Noi Volere A trasformare Esso usando Nostro cercare tavolo.
Questo è Che cosa Ottenere Etichetta fa, E questo è definito Prossimo su Qui.
Esso semplicemente prende IL etichetta id Noi passaggio In, convertiti Esso A esadecimale.
Questo Volere Dare noi Indietro un quattro caratteri esadecimale corda.
Noi Bisogno IL Giusto maggior parte quattro personaggi da quello,
E Poi Noi Aspetto Esso su In Nostro Se etichetta vettore su Qui.
Io sono andando A invia Tutto Questo codice
A definire Esso, E Poi lo avremo chiamata Etichetta Crudo Dati.
Ecco qui IL risultato.
Voi Potere Vedere Quello suo simile A Prima, tranne Ora,
Invece Di IL il più alto elenco dei livelli, Esso non lo fa Avere un altro lista,
Esso ha UN associativo vettore.
Questo superiore maggior parte cosa È a lista Di associato matrici.
Questo Primo uno Noi Potere Vedere Quello IL chiave grezza Qualunque cosa IL numero era,
avuto convertito A DataT fare E c'è suo valore E COSÌ SU.
Ma noi abbiamo notato IL secondo uno sembra Piace Esso ha tag
Quello non l'ha fatto Ottenere convertito.
Perché È Quello?
BENE, suo Perché Questo chiave ExifIFD ha COME suo dati.
In realtà, un altro IDF, SÌ, Questo È a ricorsivo dati struttura
questo è definito In termini Di si.
Se Noi Volere A etichetta IL cose qui dentro,
Noi Avere A modifica Nostro codice A etichettare ricorsivamente,
E BENE Ottenere A Quello In a minuto.
Ma Prima I Partire Questo, I Volere A spettacolo Quello Io sono andando A In realtà
combinare questi due passi in a separare funzione Quello I chiamata Ottenere EXIF dati,
Dove I Primo Ottenere IL crudo Exif dati fuori Di IL BLOB,
E Poi I etichetta Esso, e poi io ritorno IL risultato Di Quello.
Andiamo definire E correre Quello,
E Esso Dovrebbe Essere esattamente lo stesso COME Che cosa Noi Appena sega.
Sicuro Abbastanza, Esso È.
Io sono andando A vicino Questo E andare Indietro A diapositive.
Sì, saltare avanti Ancora,
COME I menzionato, Noi Avere A Fare Nostro etichettatura ricorsivamente.
COME I menzionato, Alcuni voci nei nostri metadati O IFD
Avere COME loro dati un altro IFD.
Quello significa Noi Avere A chiamata Nostro etichettatura routine ricorsivamente.
IL modo Quello I Fare Esso,
È A utilizzo Questo JSL costruito- In Ricorrenza, Quale chiamate IL attuale A funzione,
E Voi Potere passaggio In separato parametri per IL ricorsivo chiamata.
C'è Di più dettagli SU Quello In IL carta,
Quale Io sono Sicuro tu hai Già scaricato A Questo punto.
Ora, IL uno cosa A Essere consapevole Di
è quello Alcuni Di questi incorporato IFD, maggior parte Di loro utilizzo IL Stesso cercare tavolo
Quello Noi Già definito,
Ma Alcuni Di loro Avere loro Proprio cercare tavolo.
Noi Avere A Fare Sicuro erano passando
IL corretto cercare tavolo con la sua definizione Di tag
A Nostro ricorsivo chiamata COME erano andando Attraverso IL diverso livelli Di ricorsione.
Poi una volta Noi Avere a completamente etichettato dati struttura ritorno,
Noi Potere estrarre pezzi da Esso per ottenere il cose erano interessato In.
Noi Potere correre Quello Sopra a Totale serie di immagini
E raccogliere Tutto Quello dati in a dati tavolo O Alcuni altro formato.
Andiamo Aspetto A Quello In JMP.
BENE tiro su Dimostrazione 5, Quale Qui Io ho
arrotolato Tutto Di Quello ricorsivo etichettatura in Mio Ottenere EXIF Dati funzione.
Io sono andando A includere Mio spazio dei nomi codice E Poi correre Quello funzione.
Ora erano ottenere Indietro
Nostro completamente etichettato
dati struttura.
Voi Potere Vedere Quello Ora questo ID EXIF contiene delle etichette.
Là È Questo grande bloccare Di dati Di numerico cose,
E Noi Aspetto E Noi Vedere Quello quello è dentro Questo cosa chiamato Creatore Nota.
Creatore Nota È a speciale estensione A IL Specifiche Exif
Quello consente IL produttore Di a particolare dispositivo, In Questo caso , Mela,
IL produttore Di UN iPhone 12, A incorporare loro Proprio proprietario dati.
In Alcuni casi, a telecamera produttore Potrebbe svelare Che cosa loro hanno incorporato Là.
In altro casi, persone Avere ordinare Di
indovinato A Esso E Venire su con loro migliore Indovinare.
Questo è IL caso con Mela.
C'è Alcuni cose Quello Sono conosciuto E altro cose Quello non sono conosciuto.
Tu vorresti Vedere a quantità Di Questo È Appena senza tag.
Ma Alcuni cose Noi Potere Vedere, vettore di accelerazione e tempo di esecuzione,
E quant'altro In Là.
Comunque, erano andando A ignoralo per la maggior parte
E Aspetto A Che cosa Questo cosa contiene.
I Potere Vedere Quello suo UN associativo vettore In Quello Primo elemento,
E questo è Dove maggior parte Di IL cose I Volere A Affare con
sono io andando A tiro Quello fuori in suo Proprio variabile Giusto Qui.
Ha 14 elementi, COSÌ Noi Potere Vedere Che cosa quelli Sono, Che cosa loro chiavi Sono
Piace COSÌ.
Là Sono quelli chiavi.
Se Noi Volere A tiro qualcosa fuori Piace "Modello,"
I Potere Fare Quello semplicemente di sottoscrizione in exif1 "Modello"
E I Potere Vedere suo iPhone 12 Professionista
I Potere Fare IL Stesso cosa A Ottenere IL data tempo, E Là Esso È.
Ma Questo È In IL data tempo formato Quello IL Exif specificazione definisce.
Questo è non a formato Quello JMP riconosce,
Ma I Potere utilizzo JMP In funzione di formato A convertire Esso in qualcosa
usando Questo formato modello opzione, Quale È a moderno JSL cosa
Quello lascia noi specificare IL modello Di IL data tempo dati,
E JMP Volere convertire Esso A a numerico data e ora,
Quale Esso riconosce COME come, E formati Esso per IL tronco d'albero.
Quello lavorato.
Ora, Io sono Anche interessato In IL GPS coordinate,
E questo è In Questo GPS IFD parte Di IL EXIF.
Esso È uno Di quelli Quello È si UN IFD.
Andiamo accesso Esso, E Poi Noi Potere Vedere Che cosa Esso contiene.
Esso ha informazioni Di IL altitudine,
differenziale, immagine direzione, latitudine, longitudine, E velocità.
Che cosa Noi cura Di È IL latitudine e longitudine, Quale È questi quattro cose.
C'è latitudine, c'è longitudine,
E Poi Essi Avere questi associato Rif. valori.
Noi Bisogno Tutto quattro Di quelli A calcolare IL coordinate.
Andiamo inizio con IL latitudine.
BENE tiro Quello fuori in suo Proprio variabile, E Noi Vedere suo a lista Di tre elementi.
Se Noi Aspetto A Che cosa quelli tre gli elementi sono,
Noi Vedere Quello Là Sono tre vettori con due numeri In ogni uno.
IL Exif specificazione si riferisce A questi COME razionali, E Esso usi loro a quantità.
Ma Che cosa Noi Volere È attuale numeri Invece Di questi razionali,
numeratore ,denominatore.
Noi Potere convertire loro usando Questo Trasformare Ogni funzione,
Quale anelli attraverso Questo lista E elabora ogni elemento
Dopo mettendo Esso in a locale variabile R.
Noi Volere A processo Quello di dividendo
IL denominatore in IL numeratore, E Poi trasformare ogni costruisce a nuovo lista
Di quelli risultati e lo mette In Nostro variabile,
Quello essendo, Piace Voi Vedere Là.
Ora questi tre numeri Sono IL gradi, minuti, E secondi,
Ma Noi Volere A combinare loro Tutto in a separare valore per JMP A utilizzo.
Noi Avere A aggiungere loro insieme, ridimensionamento ogni componente in modo appropriato.
Fare Quello Là E Noi Ottenere
IL valore.
Ora, Se questo è In IL Settentrionale emisfero, erano Bene.
Ma Se suo In IL Meridionale emisfero, Esso esigenze A Essere negativo.
Se Noi Aspetto A Quello "GPSL" atteggiamentoR Se,"
suo O N O S, Quale racconta noi Se suo S, Noi Bisogno A negare Esso.
Noi Potere Fare IL Stesso cosa per longitudine.
Suo LongitudineR Se Volere Essere O E O IN.
E È positivo est valori E W È negativo ovest valori.
Qui Noi Vedere Noi avevo A negare
IL longitudine Perché Esso era In IL Ovest.
Se Noi scarico quelli due numeri fuori, Noi Potere utilizzo JMP costruito- In formati per
latitudine E longitudine,
E Noi Potere verificare Quello Essi incontro
cosa il Trova Potere tiro fuori Di IL file COME quelli coordinate.
Noi Potere Vedere Quello suo Nord E Ovest, COSÌ suo In Nord America.
Ora Io sono andando A saltare A Dimostrazione 6 , Dove Noi Mettere Tutto Questo insieme.
Io sono andando A utilizzo Quello codice A estrarre informazioni
fuori Di a Totale grappolo Di foto.
In Questo cartella, I Avere 16 Di loro,
E loro sono foto Quello Io ho preso A precedente JMP Scoperta Vertici
In Europa SU anni Indietro quando noi usato A Fare loro In persona.
Lo farà Mettere Tutto IL informazioni Esso trova in a dati tavolo.
Io sono andando A correre Questo E ecco Nostro dati tavolo,
E Noi Potere Vedere Quello Io ho catturato IL nomi Di IL immagine file
E IL timestamp.
Voi Potere Vedere Esso va da 2016 A 2018,
E IL Latitudine e L ONG Sono Nord E Est, COSÌ questo è Europa.
I Potere Anche Vedere IL progressione Di vari modelli di iPhone che avevo
attraverso quelli anni E Come loro lenti migliorato Sopra tempo.
Io ho impostato Questo su COSÌ Quello I Potere seleziona una riga
E clic Questo Ottenere Informazioni sceneggiatura della tabella, E Esso apre a finestra per Me
Quello spettacoli Me IL fotografia e i metadati per Esso
Quello Io ho catturato.
I Anche Avere a pulsante Qui mostrando Google Maps,
COSÌ I Potere clic Quello, E si apre a Google mappa Di Quello posizione.
Suo Giusto Là con IL rosso marcatore.
I Potere vedere se io z zio In che questo è IL Hilton Amsterdam.
Questo è Dove Noi avevo IL conferenza In 2016.
Quello Tutto sembra A lavoro BENE,
I n Questo caso,
Io sono andando A aggiungere IL foto loro stessi A Mio dati tavolo COME UN espressione colonna.
Questo è Che cosa Questo Aggiungere Foto tavolo sceneggiatura fa.
Per più grande collezioni, I volevo non Volere A Fare Quello
perché in realtà è fabbricazione a copia di quelle foto in IL dati tavolo.
Ma per 16, suo Bene.
Per migliaia O Anche centinaia, tu vorresti probabilmente non Volere A Fare Quello.
Ma suo Anche impostato Mio nuova colonna A Essere a etichetta colonna.
Ora I Potere correre Questo Esploratore sceneggiatura Quale apre
a grafico costruttore Di quelli latitudini E longitudini.
I Potere Vedere Alcuni punti Qui. Ecco qui Amsterdam.
C'è a foto Noi Appena sega e qui c'è Alcuni Di più.
Questo è decisamente Amsterdam.
Questi Sono Bruxelles. SÌ, questo è Bruxelles.
Sopra Qui, Noi Avere Francoforte.
Quello anno, Noi avuto A andare A IL Freddo
supercar Museo.
Quello era bello pulito.
Sopra Qui Noi Avere Praga.
Io sono andando A utilizzo IL lente d'ingrandimento A ingrandire SU Praga a coppia Di volte.
A t Questo punto Nostro dettagliato Terra sfondo È non Veramente aiutare noi tanto
COSÌ Io sono andando A interruttore per strada mappa servizio.
Noi Potere Vedere, SÌ, questo è decisamente Praga,
E Qui È Dove Noi cavalcato IL storico strada automobili fino al Castello di Praga
Qui È Alcuni JMP partecipanti attraversamento IL ponte per il Castello di Praga.
I Potere Vedere Giovanni autunno Là In IL distanza.
Sopra Qui, Noi Avere a molto Carino reception Quello Noi tenuto In IL comunale sala.
Ecco qui Me controllo IL tempo
SU Mio Mela orologio contro IL orologio A Fare Sicuro Quello suo Giusto.
Quello Tutto sembra A Essere facendo Che cosa Noi Volere.
In conclusione, I Volere A tocco SU IL cose Quello Noi imparato.
Noi imparato Di IL JSL oggetto BLOB,
Quale È a Bene attrezzo A Avere SU tuo attrezzo cintura
per manipolare arbitrario dati binari.
Noi utilizzo Quello A costruire su a poco applicazione per importazione file.
Lungo IL modo, Noi imparato Alcuni cose sugli spazi dei nomi, E JSL ricorsione,
specializzato lista gestione, E Alcuni moderno JSL cose Piace Trasformare Ogni, Per Ogni.
A ain quelli cose Sono coperto In tanto Di più dettaglio In IL carta.
Ma maggior parte soprattutto,
I pensare È Quello Noi sega a caso studio di come Prendere a difficile problema
Piace a formato di file complesso
E rottura Esso in sottoattività più piccole Quello Noi Potevo conquistare.
Questo è a abilità Quello Noi Tutto Avere E Bisogno A Fare utilizzo Di In Nostro professionale lavoro.
Ma I pensare suo molti volte utile A
osservare qualcuno altro facendo Esso e raccogliere suggerimenti E utensili E tecniche
Quello Noi Potere Poi utilizzo In Nostro Proprio lavoro.
Ora I Volere A giro Esso Sopra A Voi
A Prendere questi utensili E utilizzo loro A importare E scrivere IL codice A creare tuo Proprio
binario file E risolvere tuo Proprio problemi.
Grazie Voi molto tanto.