2010-11-04 66 views
2

我想從PNG文件中提取兩個字段。即,幾何字段和元數據中的一個字段。用PHP讀取PNG元數據的最快方法

我能做的最快的方式是什麼?我已經對目前執行此操作的腳本進行了基準測試,到目前爲止,最慢的操作是在PNG文件上執行實際的ImageMagick「識別」程序。 (0.4秒VS0.0001秒解析爲幾何形狀和8.39E-5秒輸出陣列來解析來自元數據的關鍵短語)

預先感謝任何幫助,

喬納森

+0

向我們顯示您的代碼,所以我們不需要複製 – stillstanding 2010-11-04 04:21:58

+0

Mine是一個非常簡單的exec()調用,用於'識別-verbose {$ file_name}'(當然有轉義)。該呼叫本身需要0.4秒。 – 2010-11-04 13:30:12

回答

1

我不熟悉任何現成的庫或類在不使用子進程調用的情況下在PHP中執行它,但如果找不到它,編寫自己的程序肯定會成爲一種方法。

PNG是一個相當簡單的塊流格式,所以尋找一個特定的塊和提取一些頭字段是微不足道的。

所有你需要的東西是讀取和檢查8字節的89 50 4E 47 0D 0A 1A 0A PNG頭,然後在讀取8個字節(塊長度加類型)和尋找塊的長度之間交替使用長度,直到你點擊塊類型想。

對於幾何形狀,假設PNG遵循的規範,這裏是它會怎麼走:

  1. 讀取和驗證PNG頭(8個字節)
  2. 閱讀和檢查第一個塊的報頭(8個字節)
    1. 成功。 type = IHDR
    2. 閱讀附加8個字節爲幾何形狀(寬度,高度,每個4個字節)
  3. 如果你想要的其他字段不在IHDR,使用塊大小從步驟2到尋求到下一個塊尋找你想要的其他領域。

它可能需要我5到15分鐘,在Python中掀起類似的東西。 (我用RAR和GIF做過類似的事情)也許在PHP中是15到25,因爲我在做低級文件I/O方面的經驗不足。

+0

感謝您對PNG標題的解釋。你的回答讓我走上了正確的道路 - 謝謝! – 2010-11-05 01:03:39

相關問題