[精讚] [會員登入]
2112

[PHP] 解析二進位圖片

使用php來解析png圖片,把資料寫在16進位格式

分享此文連結 //n.sfs.tw/15438

分享連結 [PHP] 解析二進位圖片@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2021-10-28 13:49:26 最後編修
2021-10-21 10:38:13 By 張○○
 

要使用php來解析二進位圖片,把他顯示成十六進位格式。

先看輸出

最左邊是位置,從0開始;中間是資料內容(16進位);右邊是對應的字元,不能顯示的字元用.或?表示

以下略,先不管此圖片的架構[1],單純的把二進位檔給讀出來。

<?php

$filesize = filesize('sample.png');  
$fp = fopen('sample.png', 'rb');  
$binary = fread($fp, $filesize);
fclose($fp);

$unpacked = unpack(sprintf('C%d', $filesize), $binary);
$unpacked = array_values($unpacked);

$ii=0;
$out= "";
$txt= "";

foreach($unpacked as $v){
  if($ii%30==0){
    print  $out. " " . $txt ."\n" . sprintf("%04d| ", $ii );
    $out= "";
    $txt= "";
  }
  $out .= sprintf("%02X ", $v );
  if($v >=32)$txt .= chr($v);
  else $txt .= ".";
  $ii++;
}
print $out;
print "\n";

第3~6行 用rb讀檔,把內容存入 $binary變數
第8行 用unpack方式解析, C%d 是用成無正負號數字格式,此部分是參考[2]的解法
第9行 把陣列索引清掉

第21行 把數字轉成16進位大寫 [3]
第22~23行 如果該數字>=32 ,就顯示該數字,否則用'.'來替代

 

如此就可以了。

參考資料

[1] 詳解png文件結構(不確定是否為原作) https://www.cnblogs.com/ECJTUACM-873284962/p/8986391.html

[2] https://stackoverflow.com/questions/38859621/reading-binary-files-in-php

[2] https://stackoverflow.com/questions/37094445/padding-zero-for-hexadecimal-number-in-php

 

END

你可能感興趣的文章

PHP程式經驗 #1 -- 靜態的物件比動態物件快 驗證 1. 使用動態物件函式 > 使用靜態物件函式。 2. 使用有宣告的靜態物件函式 > 使用動態無宣告的靜

[PHP] 移除陣列或字串中的重覆元素 移除陣列或字串中的重覆元素

[PHP+ci4] codeignitor4 Cache 及 Session 使用 memcached php 的framework codeignitor4 中的cache和session使用memcached

使用Yahoo OAuth2 2/2 使用Yahoo OAuth2認證我的網頁

[phpmyadmin] 缺少 mcrypt 外掛,請檢查 PHP 設定 缺少 mcrypt 外掛,請檢查 PHP 設定,安裝php-mcrypt。

[PHP] 檢查IP是否在某個網段內 mtachcidr 要檢查IP是否在某個網段內,要寫幾行?10行?5行? 不用,只要2行。以下是我寫的 code /** * matchCI

隨機好文

[PHP] 檢查檔案是否是圖檔 使用getimagesize函數檢查檔案是否是圖檔

精讚的版面變化 ▓此文僅作為舊文的記錄▓ 這篇文章為了紀念改版完成而撰寫。 原本的部落格是民國97年的作品,那時還是用舊有的技術來寫,很

外匯課程經驗 有天遇到某個朋友的正妹朋友,說她有個很棒的外匯投資課程,要我們去聽,只收場地費200大洋。她又說續效最差一個月也有1%,誰還在苦哈哈上班?

McJob 淺談 在英語世界裡,近期多了一個英文生字 Mcjob,定義為「低薪、無聊且沒有什麼前景的工作」。

DNS壓力測試工具queryperf 要怎麼知道我安裝的DNS是否能耐受的住網路上的攻擊或大量查詢,這裡有一個免費的工具 queryperf