我正在構建一個依賴於書籤的網站。這些書籤包含URL和其他一些元素。不過,我需要從用戶書籤的頁面中選擇1張圖片。目前我正在嘗試使用PHP簡單HTML DOM解析器http://simplehtmldom.sourceforge.net/解析外部HTML並返回圖像
它按預期方式拉取HTML,並按預期返回標記。但是,我想更進一步,只返回最小寬度爲40px的圖像。我知道函數getimagesize(),但從我的理解,這是資源沉重。是否有更好的方法可用於預處理圖像並獲得我期待的結果?
謝謝!
我正在構建一個依賴於書籤的網站。這些書籤包含URL和其他一些元素。不過,我需要從用戶書籤的頁面中選擇1張圖片。目前我正在嘗試使用PHP簡單HTML DOM解析器http://simplehtmldom.sourceforge.net/解析外部HTML並返回圖像
它按預期方式拉取HTML,並按預期返回標記。但是,我想更進一步,只返回最小寬度爲40px的圖像。我知道函數getimagesize(),但從我的理解,這是資源沉重。是否有更好的方法可用於預處理圖像並獲得我期待的結果?
謝謝!
首先檢查圖片HTML標籤是否有寬度屬性。如果它在40以上,請跳過它。正如馬修提到的那樣,在人們將大圖像縮小到40px寬度時,會出現誤報,但這沒什麼大不了的;這一步驟的關鍵是快速清除顯然過大的前十幾個圖像。
一旦腳本捕獲到一個圖像,說明它的寬度小於40px,請檢查標題信息以根據文件的大小推斷出一個寬度。這比getimagesize快,因爲你不必下載圖像來獲取信息。
function get_image_kb($path) {
$headers = get_headers($path);
$len = explode(" ",$headers[6]);
return $len[1];
}
$imageKb = get_image_kb('test1.jpg');
// I'm going to gander 40x80 is about 2000kb
$cutoffSize = 2000;
if ($imageKb < $cutoffSize) {
// this is the one!
}
else {
// it was a phoney, keep scraping
}
將它設置爲2000kb也會讓圖像100x30,這是不好的。
但是,在這一點上,你已經淘汰了大部分800kb的文件,這會讓你放慢速度,並且因爲我們知道它在2kb以下,所以用getimagesize()來測試這個文件並不算太重。準確的寬度。
您可以根據40px標記的挑剔程度來調整過程,因爲通常情況下,更高的精確度需要更多時間,反之亦然。
謝謝!這有助於加快速度。現在我只需要弄清楚如何加快PHP簡單的HTML DOM解析器:) –
根據你需要刮的東西,也許正則表達式比解析DOM –
顯然,'getimagesize'必須下載圖像,如果它們是遠程的。除此之外,我不知道任何性能問題。你從哪裏讀到的? –
您可以首先檢查img標籤是否設置了寬度,並在使用getimagesize之前使用該寬度。此外,標題信息包含大小..你可以忽略任何大於特定大小的圖像。即使你不知道尺寸,你可以假設一個100kb的圖像不是40x800 –
@matthew,下載所有的圖像是性能問題。如果我不需要,我不想浪費帶寬。 –