你好, 我是 迈克尔 赫克特,
和 我是 这里 今天 到 讲话 到 你 关于 输入 二进制 数据 在 跳转 使用 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 谷歌 地图 的 那 地点。
它是 正确的 那里 和 这 红色的 標記。
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 想 到 转动 它 超过 到 你
到 拿 这些 工具 和 使用 他们 到 进口 和 写 这 代码 到 创造 你的 自己的
二进制 文件 和 解决 你的 自己的 问题。
感谢 你 非常 很多。