[英]simplehtmldom class and image
我正在使用simplehtmldom類從網站獲取所有圖像,
我試圖獲取由simplehtmldom返回的圖像的寬度和高度,
我要在這里完成的是,如果圖像寬度小於50px,我不希望顯示圖像。
我嘗試了getimagesize(),但是由於圖像數量的原因,它經常保持超時。
任何想法?
謝謝。
使用getimagesize()
的速度非常慢,尤其是當您正在抓取網站並獲取許多圖像時。 PHP必須先下載每個圖像的全部內容,然后才能將數據傳遞給getimagesize()
,因此,如果您正在(例如)大型照相館,則每個圖像可以下載許多兆字節。
您可以采取一些措施來加快這一過程:
檢查<img>
標記的height / width屬性,僅獲取大於50的圖像。由於網頁創建者可能會拉伸或縮小圖像,它們不一定是准確的,但可以避免准確下載尺寸的小圖像。
與其直接使用getimagesize()
直接獲取圖像,您可以嘗試僅獲取每個圖像的前幾百個字節,其中將包含圖像頭信息。 對於GIF / JPEG圖像,高度/寬度將非常靠近文件的開頭,因此您可以節省文件傳輸的開銷。
增加腳本的執行時間。 自然地,獲取所有圖像將是一個相當緩慢的過程,並且您很可能會遇到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.