找到了,JPG格式原理。
發表時間:2023-07-30 來源:明輝站整理相關軟件相關文章人氣:
[摘要]文 件 格 式 分 析 技 術 講 座 這 種 文 件 早 在 很 多 年 前 的 浩 瀚 光 盤 圖 書 館 上 就 出 現 過 , 不 知 是 誰 設 計 的 格 式 , 壓 縮 率 還 ...
文 件 格 式 分 析 技 術 講 座
這 種 文 件 早 在 很 多 年 前 的 浩 瀚 光 盤 圖 書 館 上 就 出 現 過 , 不 知 是 誰 設 計 的 格 式 , 壓 縮 率 還 是 比 較 高 的 , 比 單 用 LZW 的 gif 或 run length 的 PCX 壓 縮 率 都 要 好 。因 為 他 的 壓 縮 方 法 比 較 適 于 二 值 圖 象 , 一 般 來 說 文 件 的 大 小 只 是 gif 文 件 的 三 分 之 一 。
我 分 析 了 浩 瀚 光 盤 的 隨 盤 閱 讀 程 序 , 對 文 件 的 解 碼 和 顯 示 在 一 個 叫 做 revv.exe 的 程 序 中 進 行 。 剩 下 的 就 是 s-ice 的 技 術 活 了 , 經 過 一 番 掙 扎 , ( 兩 天 ), 我 成 功 地 寫 出 了 自 己 的 解 碼 程 序 。
下 面 簡 要 地 介 紹 一 下 該 文 件 格 式 。
頭 三 個 字 節 為 48h 48h 01h, 應 該 是 文 件 標 識 符 (magic number), 我 才 疏 學 淺 , 不 知 道 這 是 什 么 格 式 的 文 件 標 識 。
后 面 35 byte 為 文 件 頭 ,
03h 圖 象 寬
05h 圖 象 高
以 后 的 都 是 0
圖 象 行 內 采 用 游 碼 (run length) 壓 縮 , 行 間 游 碼 有 差 值 壓 縮。 38h 開 始 文 件 主 體 , 要 把 他 當 作 一 個 bit stream. 在 這 個 bit stream 里 , 所 有 數 據 都 采 用 huffman 編 碼 。共 有 三 種 不 同 huffman 編 碼 。 全 部 都 硬 編 碼 在 程 序 中 ,沒 有 碼 表 可 查 。數 據 標 識 的 huffman 樹 比 較 短 , 最 長 只 有 7 位 , 很 容 易 就 可 以 分 析 出 來 。可 怕 的 是 游 碼 的 所 有 數 據 采 用 兩 種 不 同 的 huffman 編 碼 ( 起 始 位 置 和終 止 位 置 采 用 不 同 的 編 碼 ) 最 大 碼 長 可 以 有 十 二 三 位 , 全 部 硬 編 碼 在 程 序 中 ,人 工 分 析 太 費 時 間 了 , 不 值 得 。
為 了 分 析 出 它 的 huffman 編 碼 , 我 只 好 編 了 一 個 反 編 譯 程 序 自 動 跟 蹤 程 序 流 程 , 并 產 生 相 應 C 代 碼 , 好 在 程 序 里 的 huffman 解 碼 程 序 段 寫 得 比 較 規 范 , 因 此 我 的 反 編 譯 程 序 也 不 是 太 長 。
更 詳 細 的 圖 象 解 碼 細 節 , 大 家 可 以 參 考 我 的 原 碼 , 在 示 范 程 序 里 我 把 一 個 該 格 式 的 文 件 轉 為 了 GIF 格 式 。