簡體   English   中英

simplehtmldom類和圖像

[英]simplehtmldom class and image

我正在使用simplehtmldom類從網站獲取所有圖像,

我試圖獲取由simplehtmldom返回的圖像的寬度和高度,

我要在這里完成的是,如果圖像寬度小於50px,我不希望顯示圖像。

我嘗試了getimagesize(),但是由於圖像數量的原因,它經常保持超時。

任何想法?

謝謝。

使用getimagesize()的速度非常慢,尤其是當您正在抓取網站並獲取許多圖像時。 PHP必須先下載每個圖像的全部內容,然后才能將數據傳遞給getimagesize() ,因此,如果您正在(例如)大型照相館,則每個圖像可以下載許多兆字節。

您可以采取一些措施來加快這一過程:

  1. 檢查<img>標記的height / width屬性,僅獲取大於50的圖像。由於網頁創建者可能會拉伸或縮小圖像,它們不一定是准確的,但可以避免准確下載尺寸的小圖像。

  2. 與其直接使用getimagesize()直接獲取圖像,您可以嘗試僅獲取每個圖像的前幾百個字節,其中將包含圖像頭信息。 對於GIF / JPEG圖像,高度/寬度將非常靠近文件的開頭,因此您可以節省文件傳輸的開銷。

  3. 增加腳本的執行時間。 自然地,獲取所有圖像將是一個相當緩慢的過程,並且您很可能會遇到PHP的max_execution_time

評論跟進:

好吧,如果沒有高度/寬度,那么您可以直接跳到獲取圖像(或圖像的第一位)並直接提取高度/寬度。 檢查標簽中的高度/寬度僅是為了節省您首先要獲取圖像的麻煩。

至於從HTML中提取高度/寬度,只要在SimpleHTMLDOM中找到<img>標簽,就可以使用->getAttribute('width')->getAttribute('height')調用。 像這樣:

$dom = file_get_html('http://example.com/somepage.html');
$images = $dom->find('img');

foreach($images as $img) {
    $h = $img->getAttribute('height');
    $w = $img->getAttribute('width');

    if (isnull($h) || (isnull($w)) {
       // height and/or width not available in tag, so fetch image and get size that way
       $h = ...
       $w = ...
    }

    if (($h >= 50) && ($w >= 50)) {
        // image is bigger than 50x50, so display it...
    }
}

如果僅剪切掉我的腦袋,這可能就行不通了,但這足以使您入門。

這是很難幫助你,因為你沒有張貼您使用任何源代碼。

您應該知道height和width屬性不一定在HTML中,因此simplehtmldom對您沒有用。 您將需要使用其他方式。 使用getimagesize()使您處在正確的軌道上。 如果您嘗試訪問的主機無法訪問,則此功能可能會超時。 您需要使用set_time_limit()適當地處理它。 當getimagesize()返回0時,您也應該捕獲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM