你好, 我是 麥可 赫克特,
和 我是 這裡 今天 到 演講 到 你 關於 輸入 二進位 數據 在 跳轉 使用 JSL。
我是 在 這 團隊 那 發展 這 軟體 為了 跳轉, 和 讓我們 得到 開始了。
跳轉 能 進口 很多 的 不同的 文件格式,
一切 從 純文字 到 Excel 試算表.
什麼時候 那些 是 進口 進入 跳轉, 他們是 顯示 到 你 作為 a 數據 桌子
那 你 能 然後 使用 為了 進一步分析 和 全部 的 JMP的 能力。
但 什麼 如果 有 a 數據 類型 那 你 不能 進口?
跳轉 沒有 知道 如何 到 做 它。
在 這 案件 學習, 患病的 是 尋找 在 這 JPEG 影像 格式
那 是 漂亮的 常見的 其中 全部 數位的 相機 和 智慧型手機。
我是 當然 每個人的 熟悉的 和 它。
在 事實, 你 可能 是 說,
等待 a 分鐘, I 想法 跳轉 能 打開 JPEG,
和 在 事實, 它 能 打開 a JPEG。
但 什麼時候 它 做, 你 得到 一個 影像 喜歡 這。
但 有 更多的 在 那 JPEG 比 只是 這 圖像。
為了 例子, 如果 I 得到 資訊 在 這個,
I 看 什麼 種類 的 裝置 這 影像 曾是 採取 和, 什麼 鏡片 是 用過的,
和 甚至 這 全球定位系統 座標 的 在哪裡 I 曾是 常設 什麼時候 I 拿了 這 照片。
現在, 如何 能 我們 得到 那 數據 進口 進入 跳轉?
出色地, 我們 能 做 它 透過 JSL,
哪個 患病的 得到 到 在 只是 a 分鐘。
但 如果 我們 打開 這 文件 在 a 文字 編輯, 我們 看 那 它是 不是 人類 可讀 文字.
它是 a 系列 的 位元組 那 是 顯示 作為 這些 不可列印 人物,
和 我們 稱呼 那 二進位 數據。
它是 數據 那是 外部 這 範圍
的 普通的 字母 文字.
它 有 a 結構, 儘管, 和 這 數據 是 鎖定 裡面 那裡。
如果 僅有的 我們 能 決定 如何 到 繹 它。
到 做 那, 我們 需要 到 知道
這 規格 如何做到這一點 數據 是 鋪設 出去。
在 這 案件 的 JPEG, 那是 定義 經過 a 規格
稱為 Exif 或者 可兌換 影像 文件 格式,
和 我們 能 下載 這 規格 為了 它。
它是 a 文件 那是 到過 大約有20年了,
和 它是 在 使用 經過 全部 這 裝置 那 生產 JPEG。
不是 僅有的 硬體 裝置 喜歡 相機,
但 甚至 Photoshop 賣權 元數據 在 a JPEG 在 這 Exif 格式。
到 使用權 它 從 跳轉,
我們 需要 到 使用 a JSL 目的 已知 作為 這 BLOB 或者 二進位 大的 目的。
這 是 只是 a JSL 目的 那 持有 a 順序 的 位元組.
喜歡 這 姓名 說, 那 順序 的 位元組 能 是 大的。
我們 能 實際上 創造 a BLOB 透過載入 內容
的 任何 文件 在 你的 難的 磁碟放入其中 使用 這 負載T 擴充 文件 功能。
通常情況下, 那 會 返回 這 內容 的 a 文件 作為 文字,
但 如果 我們 添加 這 BLOB 關鍵字 作為 a 第二 範圍,
然後 這 功能 返回 a 斑點。
我們 能 拿 一 BLOB 和 子集 a 其中一部分
進入 其他 BLOB 使用 BLOB 預覽 喜歡 你 看 這裡。
這 是 服用 50 位元組 從 b, 開始 在 抵銷 100.
現在 這 抵銷 為了 BLOB 是 總是從零開始,
所以 這 第一的 位元組 在 這 BLOB 是 一個 抵銷 零。
現在 我們 可以 做 兩個都 的 那些 單一函數呼叫中的操作
經過 透過 這 抵銷 和 長度 作為參數
到 這 BLOB 關鍵字 什麼時候 我們 稱呼 低的 文字 文件。
如果 你 看 這裡 那 說, 打開 這 文件位於此路徑,
跳過 100 位元組 在 和 然後讀取 50 個位元組, 和 返回 那 作為 a 斑點。
一次 我們 有 a BLOB,
我們 能 轉變 它 到 a 特點 細繩 使用 這 斑點 到 碳 功能。
這裡 是 服用 b2 和 轉換 它的位元組 進入 a 特點 細繩,
假設 那 那些 位元組 是 在 這 " us-ascii”字元集。
如果 我們 不 指定 a 字元集, 跳轉 假設 它是 UTF-8 .
我們 可以 也 考慮 那 BLOB
到 包含 a 系列 的 數位 價值觀, 全部 的 這 相同的 類型 和 尺寸。
使用 斑點 到 矩陣 這裡, 是 服用 b2,
哪個 我們 讀 在 和 放 長度為 50 位元組,
和 口譯 它 作為 一個 大批 的 未簽名 整數,
每個 的 哪個 是 二 位元組 長的。
我們 應該 得到 後退 a 矩陣 和 二十五 數位 在 它。
現在 那 第四 範圍, 這 細繩 “大的,”
說 那 那些 未簽名 整數 在 大的 位元組序 格式,
意義 這 第一的 位元組 是 這 最多 重要的,
是 這 末端的最高部分,
和 然後 關注 經過 這 最低 部分 的 這 結尾。
我們 可以 也 指定 這 細繩 小的 到 指定 小端 格式。
二進位 文件 有
兩個都 的 這些 種類 的 表示 的 整數 和 其他 數字。
在 事實, 這 Exif 格式 用途 兩個都 大端 和 小e 激烈的。
讓我們 拿 a 看 在 這些 營運 在 行動。
我是 去 到 轉變 超過 到 跳轉,
我 去 到 打開 這 示範 腳本 這裡,D 情緒搖滾 數位 1.
現在 我們 看 一些 的 這 程式碼 我們 只是 看了 在。
這裡 我們 是 載入中 a 文字 文件, 這 文件 命名 海灘.j 掛鉤。
這 是 這 相同的 文件 那 I 用過的 在 我的 滑動。
它是 正確的 這裡 和 你 能 看 它。
你 能 也 看 那 它有一個尺寸 的 關於 3.4 我。
什麼時候 I 跑步 這 一 線 的 程式碼
和 紀錄, 它 告訴 我 那
b 是 已分配 a BLOB 3,45,000, 和 等等 位元組, 或者 3.4 我。
它 沒有 展示 我 全部 那些 位元組, 但 I 能 看 如何 大的 它 是。
I 能 得到 那 長度 使用 這 長度函數,
只是 喜歡 你 使用 為了 特點 字串。
但 什麼時候 I 使用 長度 在 a BLOB, 它 給出 我 後退 這 數位 的 位元組.
I 能
得到 a 子 BLOB 的 這 第一的 六 位元組
在 b 使用 BLOB 窺視。
出色地 做 那 這裡,
和 I 看 a BLOB 的 六 位元組 曾是 已分配。
I 能 實際上 看 在 這 價值 如果 I 想 經過 只是
提交 這 姓名 的 這 多變的。
I 能 看 這裡 是 那些 六個位元組 在 這 “ascii-hex”格式
FF-D8-FF-E1, 和 等等。
I 能 拿 這些 六 位元組 和 轉變 他們 到 a 矩陣,
和 我是 去 到 轉變 他們 到 a 矩陣 的 二 位元組 無符號整數
或者 短褲 在 大e 激烈的 格式。
鑑於 那 那裡 是 六 位元組 這裡,
I 應該 結尾 向上 和 a 矩陣 的 三 數字。
什麼時候 I 跑步 這, 當然 足夠的, 有 我的 三 數字。
我們 能 看 那些 三 數位 在 十六進位
只是為了 核實 和 這 小的 四 環形 那 I 寫道, 所以 讓我們 做 那。
那裡 他們 是, 只是 相同的 作為 前, FFD8、FFE1、 0982。
所以 現在, 讓我們 看 在 這 下一個 四 位元組 下列的 那些 六 在 這 文件,
和 出色地 得到 他們 在 a 子 BLOB 全部由 他們自己
所以 那 我們 能 然後 轉換 在 到 a 特點 細繩 使用 BLOB 到 字元。
什麼時候 I 跑步 這, 我明白了 這 特點 細繩 ” Exif。 」
你 可能 有 注意到 在 幻燈片
顯示 這 二進位 文件 內容
那 那 小的 細繩 曾是 向上 那裡 靠近頂部,
和 它是 部分 的 這 Exif 文件 規範和 識別 它 作為 這樣的。
讓我們 去 後退 到 幻燈片。
那些 函數 是 強大的。
他們 讓 我們 做 什麼 我們 需要 到 做 到 操縱 和 讀 數據 從 a BLOB,
但 他們是 a 小的 繁瑣 到 使用。
讓我們 寫 我們的 自己的 公用事業 到 製作 他們 a 位元 更多的 可管理的。
我是 去 到 開始 和 a 我將這個函數命名為“讀取值”
和 它 需要 a BLOB 和 然後 一些 抵銷 在那個 BLOB 中,
和 然後 這 數位 類型 我想讀 和 這 尺寸 的 那 類型。
它是 去 到 讀 一 價值 出去 的 這 斑點。
I 已通過 我的 BLOB 和 抵銷 和 尺寸 進入 BLOB 預覽,
得到 後退 a 子 BLOB 的 只是 那些 位元組, 和 然後 稱呼 斑點 到 矩陣
透過 在 這 類型。
I 使用 這 相同的 尺寸,
所以 這 尺寸 的 這 BLOB 和 這 尺寸 的 一個 元素 是 這 相同的。
I 應該 得到 後退 a 矩陣 的 一個值
和 I 經過 在 “大的” 因為 我是 只是 總是 去 到 使用 大端 格式。
但 I 不 想 到 返回一個 矩陣。
I 想 到 返回 那 一 價值, 所以 I 拉 它 出去 的 這 矩陣 和 返回 那。
這 是 稱為 喜歡 所以。 I 稱呼 讀取值, I 經過 在 b.
I 讀 一 無符號整數 開始 在 偏移零
和 它是 二 位元組 長的 和 I 得到 後退 那 值 FFD8。
有 a 問題 和 這 雖然程式碼 和 那是 在 這 範圍 b.
B 是 那 BLOB 那是 3.4 到 在 尺寸。
這 問題 是 那 JSL, 什麼時候 透過 a BLOB 到 a 功能,
總是 通行證 它 經過 價值, 意義 它 使 a 複製 的 它。
為了 每一個 單身的 數位 I 想 到 拔出 的 我的 BLOB 使用 這 功能,
它 將要 製作 a 複製 的 那 3.4 到
只是為了 拉 出去 二 位元組, 或者 四 位元組 或其他什麼, 和 然後 丟 它 離開
當 功能 返回。
那是 效率低下, 浪費, 和 大概 真的 慢的,
所以 我們 不 想 到 做 那。
如何 能 我們 得到 大約 那?
出色地, 反而 的 透過 它 作為 a 範圍, 讓我們 放 它 在 a 全球的。
出色地 製作 a 全球的 那 我們 載入 使用我們的 BLOB,
和 然後 我們 能 稱呼 這 功能
和 它會 只是 參考 到 這 全球的 反而 的 a 範圍。
在 事實, 我們 能 製作 a 束 的 全域變數。
我們 能 記錄 這 長度 的 這 BLOB 到 抵銷
到 在哪裡 我們 是 現在 加工 數據 在 這 BLOB,
和 或許 甚至 為了 這 位元組順序。
這 問題 和 全域變數, 儘管,
是 那 他們 是 在 這 全球的 符號表,
和 他們 可能 幹擾 和 其他 程式碼 那 你 有。
在 事實, 我們會 喜歡 到 寫 我們的 輸入 程式碼 作為 某物 那 能 是 用過的
經過 其他 客戶,
和 那些 客戶 可能 有 他們的 自己的 變數 經過 這些 名字,
或者 他們 可能 是 使用 其他 程式碼 圖書館 那 會 幹擾。
如何 做 我們 得到 大約 那?
出色地, 我已經 完畢 它 經過 創造 a 命名空間。
I 稱呼 我的 命名空間 " EXIF解析器
現在, 反而 的 全域變數, I 放 他們 全部 作為 變數 在我的命名空間內,
和 現在 他們是 N 名稱空間 全域變數 和 那 前綴。
前 I 稱呼 我的 功能, I 需要 到 初始化 他們。
患病的 載入 這 “海灘.jpeg” 文件 進入 這 EXIF P 阿瑟 BLOB,
患病的 記錄 它是 關聯。
患病的 開始 離開 我的 抵銷 在 這 非常 開始 在 零,
和 患病的 放 這 位元組順序 到 “大的,”
和 然後 I 能 改變 我的 功能, 簡化 它 a 位元 喜歡 這。
現在, 我已經 實際上 放 我的 同一命名空間中的函數讀取值
作為 部分 的 這 EXIF 解析器 命名空間。
現在, 全部 I 需要 到 做 是 經過 a 類型和尺寸。
BLOB 預覽 現在 用途 這 全域 BLOB 那是 儲存 在 這 命名空間,
這 全球潮流 抵銷 我們正在閱讀的
和 BLOB 這 矩陣 甚至 使用位元組順序,
所以 我們 能 參數化, 我們 能 改變 它。
一次 我已經 檢索 這 結果 I 想,
患病的 增量 這 抵銷 經過 這 位元組數
我們 只是 過程, 和 然後 患病的 返回 它 作為 前。
讓我們 看 什麼 那 看起來 喜歡 在 行動。
我們將看看 在 示範 2
和 這是 我的 命名空間。
這裡 是 我的 全域變數 在 那 命名空間。
這是 這 讀取值 功能, 只是 喜歡 我們 鋸。
我已經 得到 一些 更多的 功能。 我已經 放 一個 EXIF解析器
這是 讀短,這只會導致讀值,
但 它 總是 通行證 未簽名 整數 的 二 位元組.
相似地, 讀 長的 讀 和 未簽名 整數 的 四 位元組.
我已經 也 得到 讀 ASCII 你傳遞它 a 尺寸 在 位元組
和 它 使 a 子 BLOB 的 那 許多 位元組
在 這 目前的 抵銷 從 這 全域 BLOB,
和 然後 原因 BLOB 到 收費 到 轉變 它 進入 a 細繩。
它是 使用 這 “us-ascii”字符 放,
因為 那是 這 字元集 那 這 Exif 規格 說
所有 它是 特點 數據 用途。
然後 只是 喜歡 和 讀取值, 它 增量 到 抵銷 過去的 這 位元組
那 是 已經 已處理 和 返回 這 細繩。
讓我們 提交 全部 的 這 程式碼
所以 那 那些 事物 是 全部 定義 和 然後 我們 能 嘗試 到 使用 他們。
第一的, 出色地 初始化 我們的 EXIF P 阿瑟 全域變數,
和 然後 患病的 讀 這 第一的 三 短褲 從 這 文件 只是 喜歡 我們 做過 前。
但 現在, 我是 去 到 稱呼 閱讀短文。
是 開始 它 離開 在 零,
所以 我是 去 到 稱呼 它 三 次 在 這 環形。
它 將要 讀 在 每個 連續 短的,
前進 抵銷 作為 它 去, 然後列印 他們 出去 只是 喜歡 前。
那裡 他們 是。
現在, 我們的 抵銷 是 坐著 在 偏移六 只是 過去的 這 最後的 事物 它 讀。
I 能 呼叫 Read Ascii 為了 四個位元組 和 I 得到 後退 那 相同的 細繩。
好的, 所以 讓我們 去 後退 到 幻燈片。
現在, 我們 有 一些 工具 我們 能 使用 到 開始 大樓 我們的 EXIF 解析器。
我們 需要 到 你 進入 這 規格
到 看 什麼 做 這 EXIF 數據 格式 和 這 JPEG 文件 看 喜歡。
出色地, 在 這 頂部 等級, 它 看起來 某物 喜歡 這。
它 開始 和 二 位元組, 哪個 是 什麼是 稱為 這 開始 的 影像 標記。
我們 已經 見過 那些 二 位元組.
他們是 這 價值 纖維增強複合材料 8.
如果 你的 文件 沒有 從那開始, 它是 不是 a JPEG。
然後 有 a 系列 的 區塊 的 數據,
和 每個 堵塞 開始 和 二 位元組, 哪個 是 a 標記,
然後 二 位元組, 哪個 是 a 尺寸,
和 然後 一些 數據 哪個 是 然而 許多 位元組 這 尺寸 的 那裡 是。
現在 這 尺寸 也 包括 本身, 所以 真的 這 數據 是 尺寸 減 二。
你 能 看 那裡, 是 a 定義了一堆不同的區塊類型,
但 一些 的 他們 是 選修的, 一些 的 他們 能 是 重複。
這 一 那 我們 關心 關於 是 APP1 和 APP2。
那是 在哪裡 這 EXIF 數據 將要 是。
然後 有 a 束 的 其他的 那 我們 不 關心 關於。
最終, 我們 看 一 稱為 開始 的 掃描 或者 緊急呼救。
什麼時候 我們 打 那, 我們 知道 那 這 下一個 部分 的 這 文件
將要 是 這 實際的 影像 數據, 哪個 是 這 像素。
什麼時候 我們 打 那, 我們 能 停止。
然後 後 這 影像 數據 是 結尾 的 圖像。
我們 需要 一個 演算法 到 讀 這 數據。
這是 什麼 出色地 使用。
第一的, 出色地 讀 這 第一的 二 位元組,
看 如果 它 火柴 這 開始 的 影像標記,
和 然後 我們 知道 我們 有 a JPEG。
然後 出色地 有 a 儘管 循環,其中在 while 循環中
每個 時間 通過, 出色地 過程 a 單身的 堵塞。
到 做 那, 我們 將要 節省 這 目前的 抵銷 位置,
讀 這 二 位元組 為了 這 下一個 標記,
和 如果 那 標記 是 緊急呼救, 我們 能 休息 出去 的 這 環形。
下一個, 我們 讀 這 二 位元組 為了 這 尺寸。
現在 我們 有 全部 這 資訊 我們 需要 到 過程 這 堵塞。
任何 那 意味著, 出色地 做 它。
然後 我們 能 跳過 過去的 這 數據 在 處理區塊的情況
沒有 改變 我們的抵消, 但 出色地 明確地 移動我們的偏移量
到 任何 它 曾是 在 這 開始 的 這 環形,
加 這 二 位元組 為了 這 標記, 加 這 價值 的 這 堵塞 尺寸。
什麼時候 我們 得到 出去 的 這 環形,
我們 任何一個 跑了 出去 的 數據 在 這 堵塞 到 過程 或者 我們 打 那 緊急求救 標記,
所以 是 完畢。
讓我們 看 什麼 那 看起來 喜歡。
示範 3 有 這 代碼。
你 看, 我們 有 我們的 命名空間, 和 全部 這 是 這 相同的 作為 前。
我是 去 到 跑步 它 只是 到 確保 一切 是 已定義。
現在, 是 添加 a 新的 功能,
哪個 我已經 也 放 在 這 命名空間,
和 它是 稱為 EXIF 解析器:取得 EXIF 原始數據,
和 我是 透過 在 這 小路 到 這 文件, 那個 JPEG 文件 那 我們 想 到 過程。
現在, 我已經 定義 一個 聯想 大批 這裡 那 地圖 那些 魔法 標記 程式碼
到 他們的 縮寫 這樣我們就可以 列印 他們 出去 在 這 紀錄.
I 載入 向上 我的
Exif 解析器 全域變數 喜歡 前,
僅有的 現在 我是 透過 在 這 文件 小路 那 I 曾是 鑑於,
和 然後 I 開始 口譯 什麼 這 數據 是。
第一的, I 看 在 這 非常 第一的 短的
和 製作 當然 就在開始 的 影像 標記。
如果 不是, I 只是 返回 因為 它是 不是 a JPEG格式 文件。
我是 去 到 寫 到 這 紀錄 那 I 鋸 它 在 抵銷 零。
然後 這是 我的 儘管 環形 到 走 透過 那些 塊。
在 這 頂部 的 這 環形,
我是 去 到 重置 我的 位元組順序 到 “大的,” 因為 一些 的 這 塊,
什麼時候 我們 過程 他們, 將要 有 他們的 自己的 位元組順序
和 改變 它 到 小的。
我們 想 到 知道 那 這 位元組順序是 大的 在 這 循環頂部
因為 這 堵塞 結構 總是 用途 大端 數據。
然後 我是 去 到 節省 任何 這 目前的 抵銷 是,
和 然後 我是 去 到 讀 這 下一個 標記。
它是 a 短的, 和 ID 看 到 看 如果 它是 平等的 到 緊急呼救,
哪個 是 那 魔法 數字。
如果 它 是, I 能 休息 出去 的 這 環形 後 日誌記錄 那 I 鋸 它。
下一個, 患病的 讀 這 二 區塊大小的位元組,
和 然後 I 將要 過程 這 堵塞。
現在, 在 這 例子, 我的 加工 包括 的 寫作 a 訊息 到 這 紀錄,
所以 患病的 做 那。
然後 我是 準備好 到 跳過 過去的 這 堵塞。
I 做 那 經過 改變 我的 抵銷 到 是 任何 它 曾是 在 這 開始,
加 這 二 位元組 為了 這 標記, 加 這 堵塞 尺寸。
什麼時候 I 休息 出去 的 這 環形, I 重置 我的 全球的 沙 我是 完畢。
讓我們 定義 那 功能 經過 提交 這。
我會跑 腳本, 和 然後 I 可以調用它 透過 在 “海灘.jpg”,
讓我們來看看 什麼 我們 得到。
它 列印 出去 到 這 紀錄.
它 抵銷 零, 有 開始 的 影像, 然後 它 抵銷 二, 有 APP1,
和 它 有 這 尺寸 2,466 位元組.
然後 我們 得到 APP2, 哪個 有 關於 3萬 的 數據。
那是 最多 的 它 正確的 那裡。
然後 我們 有 a 束 的 區塊 那 我們並不真正關心
但 最終, 我們 看 緊急求救 所以 我們 休息 出去 的 這 環形。
那是 全部 在職的 出色地。
讓我們 去 後退 到 幻燈片。
現在, 我是 去 到 跳過 前方 在 加工 一些 的 這 文件 格式
只是 為了 這 清酒 的 時間。
但 如果 你 下載 這 紙 那是 聯繫 和 這 講話,
這 滿的 程式碼 是 那裡 和 很多 更多的 細節。
I 高度 推薦 那 你 做 那,
但 我是 去 到 給你 a 味道 的 它 這裡。
什麼 我們 做 下一個 是 我們 過程 每個 的 那些 區塊 那 我們 有 讀,
和 一些 的 他們 我們 能 忽略。
我們 想 到 篩選 出去 這 區塊 那 做 不是 包含 過量的 數據。
然後 這 一 那 做, 我們 需要 到 做 它是 自己的 解析。
什麼 我們已經 發現 什麼時候 我們 看 進入 這 Exif 規範
是 那 這些 區塊 包含 他們的 自己的 資料塊集
稱為 影像 F 和 目錄 或者 IFD。
然後 那些 包含 個人 元數據 資訊
和 標籤 說 什麼 這 數據是
和 然後 什麼 格式 它是 在, 和 然後 這 數據 本身。
我們 想 到 收集 全部 的 那些 事物 一起 進入 這些 列表。
會有 是 清單 的 清單 的 列表, a 有些 複雜的 數據 結構。
但 這 清單 數據 結構 是 非常普通
和 跳轉 和 能 抓住 全部 種類 的 數據, 所以 那是 什麼 我們 想 到 使用。
它會 有 那些 元數據 專案 標記
和 這些 數位 價值觀 那 我們 稱呼 這 生的 標籤,
但 我們 想 到 代替 那些
和 實際的 人類 可讀 標籤 那 確認 什麼 他們 是。
讓我們 看 在 這 和 跳轉, 和 患病的 看 在 演示 4 .
現在, 在 這 觀點,
I 有 採取 全部 我的 程式碼 在 這 “EXIF解析器” 命名空間
和 放 它 進入 它是 自己的 文件。
現在 演示 4 是 a 客戶 的 我的 程式碼, 哪個 是 一個“EXIF Parser.jsl”。
I 能 只是 包括 那。
現在, 這 功能 那 獲取 這 數據,
I 能 稱呼 它 透過 在 這 姓名 的 這 JPEG格式 文件。
現在 我已經 延長 這 功能 在 這裡 實際上 過程 那些 塊,
並打破它們 向下, 篩選 出去 這 一 那 是 不是 EXIF
全部 這 事物 我們 只是 談到, 和 給 我們 後退 那 數據 結構。
讓我們 跑步 這 和 看 什麼 我們 得到。
出色地, 我們 得到 a 很多 的 數字, 一些 字串。
你 看, 這 是 在 清單 之內 此處列出,
和 有 一個 最外層 列表,
和 然後 它 包含 不同的 專案 哪個 是 列表。
每個 的 那些 有 這些 對 的 值。
有 a 數位 哪個 是 這 生的 標籤, 和 然後 這 價值。
這 一個人的 a 細繩。 這 一 是 也 a 細繩。
這 一個人的 a 數字。 這 一個人的 a 矩陣。
這 數據 能 是 不同的 類型, 但 這 標籤 是 全部 數字。
什麼 我們 想 到 做 下一個 是 轉變 那些 數位 進入 人類 可讀 專案.
在 事實, 這 所有的 列表,
我們 想 到 轉變 它 進入 一個 聯想 大批 那 索引 這 數據 經過 鍵。
這 第一的 事物 我是 去 到 做
是定義 a 對應 從 這些 數位 到 人類 可讀 鍵 我們 想 到 使用。
那是 在 這 長的 聯想 大批 正確的 這裡。
現在, 我是 實際上 使用 這 十六進位 鍵的值,
因為 那是 如何 它們是指定的 在 這 Exif 規範,
和 它 使 它 更輕鬆 到 跟隨 沿著 什麼時候 你是 尋找 在 這 規格。
有 a 束 的 那些,
和 我是 去 到 開始 在 這 底部,然後向上移動。
向下 這裡 在 這 功能, 標籤 生的 數據。
I 已通過 在 這 所有的 數據 結構 我們從 解析 這 斑點。
這是 這 定義 的 標籤 生的 數據。
我是 去 到 返回
a 清單 作為 我的 結果,
所以 我是 去 到 走 透過 這 清單 作為 我的 輸入 和 使用 它
到 建造 向上 這 結果 列表。
I 使用 這 為了 每個 構造, 哪個 是 a 新的 現代的 JMP函數
那 散步 透過 a 列表, 和 為了 每個 元素 的 這 列表,
它 拉 那 出去 進入 這 多變的 生的 exif, 患病的 經過 到 這 功能。
然後 I 想 到 附加 它 到 我的 結果。 I 做 那 使用 這 插入 進入 線。
我是 插入 它 到 這 結尾 的 結果, 和 I 有 到 使用 評估 清單 到 克服
某物 那 跳轉 是 正在做 到 是 有幫助的 和 清單 創建。
再次, 有 更多的 細節 關於 這 東西 在 這 紙。
它是 值得 下載 和 檢查 進入。
但 為了 這裡, 是 只是 去 到 看 在 這 稱呼 到 標籤 EXIF,
和 那是 正確的 向上 這裡。
標籤 EXIF 是 去 到 做 a 相似的 事物
在哪裡 它是 去 到 走 透過 每個 的 這些 標籤 價值 對。
反而 的 返回 a 列表, 它正在進行 到 返回 一個 聯想 大批。
這裡, 我們 是 初始化結果 到 是 一個 聯繫 大批。
那是 什麼 這 令牌 方法。
它是 一個 空的 聯想 大批, 和 然後 出色地 返回 它 在 這 結尾。
出色地 也 使用 為了 每個 到 走 透過列表,
和 我們 知道 那 每個 生的 物品 是 去 到 是 a 清單 的 二 元素。
我們 得到 這 第一的 元素,
哪個 是 這 生的 標籤, 然後 第二 元素是 這 數據。
我們 簡單地 建造 向上 我們的聯想 大批 經過 添加
一個 物品 已鍵控 經過 這 生的 標籤 和 這 價值 的 這 數據。
漂亮的 簡單的, 除了 我們 不想 這 鑰匙 到 是 這 生的 標籤。
我們 想 到 轉換 它 使用 我們的 抬頭 桌子。
那是 什麼 得到 標籤 做, 和 那是 定義 下一個 向上 這裡。
它 簡單地 需要 這 標籤 ID 我們 經過 在, 皈依者 它 到 十六進位.
這 將要 給 我們 後退 四個字符 十六進位 細繩。
我們 需要 這 正確的 最多 四 其中的人物,
和 然後 我們 看 它 向上 在 我們的 如果 標籤 大批 向上 這裡。
我是 去 到 提交 全部 這 程式碼
到 定義 它, 和 然後 我們會擁有它 稱呼 標籤 生的 數據。
這是 這 結果。
你 能 看 那 它是 相似的 到 前, 除了 現在,
反而 的 這 最頂層 級別列表, 它 沒有 有 其他 列表,
它 有 一個 聯想 大批。
這 頂部 最多 事物 是 a 清單 的 聯繫 數組。
這 第一的 一 我們 能 看 那 這 原始密鑰 任何 這 數位 曾是,
得到 已轉換 到 日期 要做 和 有 它是 價值 和 所以 在。
但 我們已經 注意到 這 第二 一 看起來 喜歡 它 有 標籤
那 沒有 得到 已轉換。
為什麼 是 那?
出色地, 它是 因為 這 鑰匙 ExifIFD 有 作為 它是 數據。
實際上, 其他 以色列國防軍, 是的, 這 是 a 遞迴 數據 結構
那是 定義 在 條款 的 本身。
如果 我們 想 到 標籤 這 事物 在這裡面,
我們 有 到 改變 我們的 程式碼 到 遞歸標記,
和 出色地 得到 到 那 在 a 分鐘。
但 前 I 離開 這, I 想 到 展示 那 我是 去 到 實際上
結合 這些 二 步驟 進入 a 單身的 功能 那 I 稱呼 得到 EXIF 數據,
在哪裡 I 第一的 得到 這 生的 Exif 數據 出去 的 這 BLOB,
和 然後 I 標籤 它, 然後我 返回 這 結果 的 那。
讓我們 定義 和 跑步 那,
和 它 應該 是 完全一樣 作為 什麼 我們 只是 鋸。
當然 足夠的, 它 是。
我是 去 到 關閉 這 和 去 後退 到 幻燈片。
是的, 跳繩 前方 再次,
作為 I 提及, 我們 有 到 做 我們的 標籤 遞歸地。
作為 I 提及, 一些 條目 在我們的元資料中 或者 內部財務數據
有 作為 他們的 數據 其他 IFD。
那 方法 我們 有 到 稱呼 我們的 標籤 常規 遞歸地。
這 方式 那 I 做 它,
是 到 使用 這 JSL 內建 在 遞迴, 哪個 呼叫 這 目前的 到 功能,
和 你 能 經過 在 分離 參數 為了 這 遞迴 稱呼。
有 更多的 細節 在 那 在 這 紙,
哪個 我是 當然 你已經 已經 下載 在 這 觀點。
現在, 這 一 事物 到 是 意識到的 的
是那個 一些 的 這些 嵌入式 IFD, 最多 的 他們 使用 這 相同的 抬頭 桌子
那 我們 已經 定義,
但 一些 的 他們 有 他們的 自己的 抬頭 桌子。
我們 有 到 製作 當然 是 透過
這 正確的 抬頭 桌子 有自己的定義 的 標籤
到 我們的 遞迴 稱呼 作為 是 去 透過 這 不同的 等級 的 遞迴.
然後 一次 我們 有 a 完全 標記 數據 結構 返回,
我們 能 提煉 件 從 它 得到 事物 是 有興趣的 在。
我們 能 跑步 那 超過 a 所有的 一系列影像
和 收集 全部 那 數據 進入 a 數據 桌子 或者 一些 其他 格式。
讓我們 看 在 那 在 跳轉。
出色地 拉 向上 示範 5、 哪個 這裡 我已經
捲起 全部 的 那 遞迴 標籤 進入 我的 得到 EXIF 數據 功能。
我是 去 到 包括 我的 命名空間 程式碼 和 然後 跑步 那 功能。
現在 是 得到 後退
我們的 完全 標記
數據 結構。
你 能 看 那 現在 此 EXIF ID 裡面有標籤。
那裡 是 這 大的 堵塞 的 數據 的 數位 東西,
和 我們 看 和 我們 看 那 這是 這 事物 稱為 製造商 筆記。
製造商 筆記 是 a 特別的 擴大 到 這 Exif 規範
那 允許 這 製造商 的 a 特別的 裝置, 在 這 案件 , 蘋果,
這 製造商 的 一個 iPhone 12, 到 嵌入 他們的 自己的 所有權 數據。
在 一些 案件, a 相機 製造商 可能 揭示 什麼 他們已經 嵌入式 那裡。
在 其他 案件, 人們 有 種類 的
猜測 在 它 和 來 向上 和 他們的 最好的 猜測。
那是 這 案件 和 蘋果。
有 一些 事物 那 是 已知 和 其他 事物 那 不是 已知。
你會 看 a 很多 的 這 是 只是 未加標籤。
但 一些 事物 我們 能 看, 加速度向量和運行時,
和 什麼都沒有 在 那裡。
反正, 是 去 到 大部分情況下忽略這一點
和 看 在 什麼 這 事物 包含。
I 能 看 那 它是 一個 聯想 大批 在 那 第一的 元素,
和 那是 在哪裡 最多 的 這 事物 I 想 到 交易 和
我是 去 到 拉 那 出去 進入 它是 自己的 多變的 正確的 這裡。
它有 14 元素, 所以 我們 能 看 什麼 那些 是, 什麼 他們的 鍵 是
喜歡 所以。
那裡 是 那些 鍵。
如果 我們 想 到 拉 某物 出去 喜歡 “模型,”
I 能 做 那 簡單地 經過 下標為 exif1“模型”
和 I 能 看 它是 iPhone 12 贊成。
I 能 做 這 相同的 事物 到 得到 這 日期 時間, 和 那裡 它 是。
但 這 是 在 這 日期 時間 格式 那 這 Exif 規格 定義。
那是 不是 a 格式 那 JMP 認識到,
但 I 能 使用 JMP的 在 格式化函數 到 轉變 它 進入 某物
使用 這 格式 圖案 選項, 哪個 是 a 現代的 JSL 事物
那 讓 請指定 這 圖案 的 這 日期 時間 數據,
和 跳轉 將要 轉變 它 到 a 數位 日期時間,
哪個 它 認識到 作為 這樣的, 和 格式 它 為了 這 紀錄.
那 工作了。
現在, 我是 也 有興趣的 在 這 全球定位系統 座標,
和 那是 在 這 全球定位系統 因弗達 部分 的 這 EXIF。
它 是 一 的 那些 那 是 本身 一個 IFD。
讓我們 使用權 它, 和 然後 我們 能 看 什麼 它 包含。
它 有 資訊 關於 這 高度,
微分, 影像 方向, 緯度, 經度, 和 速度。
什麼 我們 關心 關於 是 這 緯度 和經度, 哪個 是 這些 四 事物。
有 緯度, 有 經度,
和 然後 他們 有 這些 聯繫 參考 值。
我們 需要 全部 四 的 那些 到 計算 這 座標。
讓我們 開始 和 這 緯度。
出色地 拉 那 出去 進入 它是 自己的 多變的, 和 我們 看 它是 a 清單 的 三 元素。
如果 我們 看 在 什麼 那些 三 元素是,
我們 看 那 那裡 是 三個向量 和 二 數位 在 每個 一。
這 Exif 規格 指的是 到 這些 作為 有理數, 和 它 用途 他們 a 很多。
但 什麼 我們 想 是 實際的 數位 反而 的 這些 有理數,
分子 ,分母。
我們 能 轉變 他們 使用 這 轉換 每個 功能,
哪個 循環 穿過 這 清單 和 處理每個元素
後 放置 它 進入 a 當地的 多變的 河
我們 想 到 過程 那 經過 劃分
這 分母 進入 這 分子, 和 然後 轉換 每個 建構 a 新的 清單
的 那些 結果 並把它 在 我們的 多變的,
那 存在, 喜歡 你 看 那裡。
現在 這些 三 數位 是 這 度, 分鐘, 和 秒,
但 我們 想 到 結合 他們 全部 進入 a 單身的 價值 為了 跳轉 到 使用。
我們 有 到 添加 他們 一起, 縮放 每個 成分 適當地。
做 那 那裡 和 我們 得到
這 價值。
現在, 如果 那是 在 這 北方 半球, 是 美好的。
但 如果 它是 在 這 南方 半球, 它 需求 到 是 消極的。
如果 我們 看 在 那 “GPSL” 態度R 如果,”
它是 任何一個 N 或者 年代, 哪個 告訴 我們 如果 它是 年代, 我們 需要 到 否定 它。
我們 能 做 這 相同的 事物 為了 經度。
它是 經度R 如果 將要 是 任何一個 E 或者 在。
E 是 積極的 東方 價值觀 和 W 是 消極的 西方 值。
這裡 我們 看 我們 有 到 否定
這 經度 因為 它 曾是 在 這 西方。
如果 我們 傾倒 那些 二 數位 出去, 我們 能 使用 JMP的 內建 在 格式 為了
緯度 和 經度,
和 我們 能 核實 那 他們 匹配
什麼 發現 能 拉 出去 的 這 文件 作為 那些 座標。
我們 能 看 那 它是 北 和 西方, 所以 它是 在 北 美國。
現在 我是 去 到 跳過 到 演示 6 , 在哪裡 我們 放 全部 這 一起。
我是 去 到 使用 那 程式碼 到 拉取訊息
出去 的 a 所有的 束 的 照片。
在 這 資料夾, I 有 16 的 他們,
和 他們是 照片 那 我已經 採取 在 以前的 跳轉 發現 高峰會
在 歐洲 在 年 後退 當我們 用過的 到 做 他們 在 人。
它會 放 全部 這 資訊 它 發現 進入 a 數據 桌子。
我是 去 到 跑步 這 和 這是 我們的 數據 桌子,
和 我們 能 看 那 我已經 捕獲 這 名字 的 這 影像 文件
和 這 時間戳。
你 能 看 它 去 從 2016 到 2018年,
和 這 緯度和左 非政府組織 是 北 和 東方, 所以 那是 歐洲。
I 能 甚至 看 這 進展 的 我擁有的各種 iPhone 型號
穿過 那些 年 和 如何 他們的 鏡片 改進 超過 時間。
我已經 放 這 向上 所以 那 I 能 選取一行
和 點選 這 得到 資訊 表格腳本, 和 它 打開 a 窗戶 為了 我
那 節目 我 這 照片 和元數據 為了 它
那 我已經 被捕獲。
I 甚至 有 a 按鈕 這裡 顯示谷歌地圖,
所以 I 能 點選 那, 和 彈出 a Google 地圖 的 那 地點。
它是 正確的 那裡 和 這 紅色的 標記。
I 能 看看我是否 z 叔叔 在 這是 這 希爾頓 阿姆斯特丹。
那是 在哪裡 我們 有 這 會議 在 2016年。
那 全部 似乎 到 工作 出色地,
I n 這 案件,
我是 去 到 添加 這 照片 他們自己 到 我的 數據 桌子 作為 一個 表達 柱子。
那是 什麼 這 添加 照片 桌子 腳本 做。
為了 更大 收藏品, I 會 不是 想 到 做 那
因為它實際上 製作 a 複製 這些照片 進入 這 數據 桌子。
但 為了 16, 它是 美好的。
為了 數千 或者 甚至 數百個, 你會 大概 不是 想 到 做 那。
但 它是 也 放 我的 新專欄 到 是 a 標籤 柱子。
現在 I 能 跑步 這 探險家 腳本 哪個 打開
a 圖形 建造者 的 那些 緯度 和 經度。
I 能 看 一些 點 這裡。 這是 阿姆斯特丹。
有 a 照片 我們 只是 鋸 這是 一些 更多的。
那是 確實 阿姆斯特丹。
這些 是 布魯塞爾。 是的, 那是 布魯塞爾。
超過 這裡, 我們 有 法蘭克福。
那 年, 我們 得到 到 去 到 這 涼爽的
超跑車 博物館。
那 曾是 漂亮的 整潔的。
超過 這裡 我們 有 布拉格。
我是 去 到 使用 這 放大鏡 到 放大 在 布拉格 a 夫妻 的 次。
A t 這 觀點 我們的 詳細的 地球 背景 是 不是 真的 幫助 我們 很多
所以 我是 去 到 轉變 到街上 地圖 服務。
我們 能 看, 是的, 那是 確實 布拉格,
和 這裡 是 在哪裡 我們 騎 這 歷史性 街道 汽車 到達布拉格城堡
這裡 是 一些 跳轉 與會者 穿越 這 通往布拉格城堡的橋。
I 能 看 約翰 落下 那裡 在 這 距離。
超過 這裡, 我們 有 a 非常 好的 接待 那 我們 握住 在 這 市政 大廳。
這是 我 檢查 這 時間
在 我的 蘋果 手錶 反對 這 鐘 到 製作 當然 那 它是 正確的。
那 全部 似乎 到 是 正在做 什麼 我們 想。
在 結論, I 想 到 觸碰 在 這 事物 那 我們 學到了。
我們 學到了 關於 這 JSL 目的 BLOB,
哪個 是 a 好的 工具 到 有 在 你的 工具 腰帶
為了 操縱 隨意的 二進制數據。
我們 使用 那 到 建造 向上 a 小的 應用 為了 輸入 文件。
沿著 這 方式, 我們 學到了 一些 事物 關於命名空間, 和 JSL 遞迴,
專門 清單 處理, 和 一些 現代的 JSL 事物 喜歡 轉換 每個, 為了 每個。
在 艾因 那些 事物 是 覆蓋 在 很多 更多的 細節 在 這 紙。
但 最多 重要的是,
I 思考 是 那 我們 鋸 a 案件 學習 如何 拿 a 難的 問題
喜歡 a 複雜的文件格式
和 休息 它 進入 較小的子任務 那 我們 可以 征服。
那是 a 技能 那 我們 全部 有 和 需要 到 製作 使用 的 在 我們的 專業的 工作。
但 I 思考 它是 許多 次 有幫助的 到
觀察 某人 別的 正在做 它 並拿起 尖端 和 工具 和 科技
那 我們 能 然後 使用 在 我們的 自己的 工作。
現在 I 想 到 轉動 它 超過 到 你
到 拿 這些 工具 和 使用 他們 到 進口 和 寫 這 程式碼 到 創造 你的 自己的
二進位 文件 和 解決 你的 自己的 問題。
感謝 你 非常 很多。