2012-02-25 118 views
0

參考上一個問題methods width and height Mechanize如何從圖片網址獲取大小或重量?

我想知道如何從Web頁面圖像的機械尺寸獲得大小。

我已經創建了一個像helper一樣使用的方法,但是這個過程非常慢,

url = "http://www.birchbox.com" 
page = Mechanize.new.get(url) 
images_url = page.images.map{|img| img.url.to_s }.compact 

這是輔助方法:如果它們具有100像素更小的寬度

def check_image_size 
    images_urls.each do |image_url| 
    image = MiniMagick::Image.open(image_url) 
    if image[:width] < 100 
    images_urls.delete("#{image_url}") 
    end 
    end 
return images_urls 
end 

此方法刪除從陣列的所有圖像。

該方法的問題在於該過程非常緩慢。我的頁面需要很長時間才能加載此方法。

是否有任何快速和簡單的方法來做到這一點機械化?

+0

當你說<100時,你的意思是圖像的真實大小,或者是他們看到的人看到的方式 這一頁。他們不一樣。 – smparkes 2012-02-25 20:30:44

+0

我指的是圖像的真實大小:D – hyperrjas 2012-02-25 20:34:26

回答

1

如果你想要的圖像的真實大小,你將不得不取得它。

如您所述,這可能需要很長時間。加速這一點的一種方法是不要獲取整個圖像,而是逐步獲取並解析它。只要有足夠的圖像來確定其大小,就可以停止閱讀圖像。

這相當複雜,可能無法一直工作,因爲對於某些圖像類型,您需要完整地獲取圖像以便了解尺寸(我認爲)。

+0

我的主要問題是它的機械化獲取像素大小爲** 1x1 **的圖像或圖像作爲圖標,我不想顯示的化身等。我需要過濾這個圖像。例如。像** spacer.gif **這樣的圖像用於佈置舊網頁的空白空間。然後,我想知道如何過濾這種圖像類型... – hyperrjas 2012-02-25 20:45:17

+0

對於你要求的東西沒有簡單的答案。你甚至不需要真正的圖像大小,你想要的大小如圖所示(因爲一個大的圖像可以顯示小,反之亦然)。這需要解釋CSS(可能JavaScript)。你可以用無頭瀏覽器來做到這一點(有一些基於webkit的)。但正如我所說,這都是不平凡的。 – smparkes 2012-02-25 20:51:49

1

我同意smparkes,它很複雜,它可能不會給你一個速度優勢。但這裏有一些想法來加快速度:

  • 檢查文件大小。首先將圖像下載到臨時文件,並且您可以跳過小於1Kb左右的任何內容。
  • 分析文件名。你知道跳過spacer.gif,但如何名稱 像my_tiny_image_20x20.gif
  • 同時下載。這是棘手的,但你可以使用eventmachine 在同一時間下載圖像。
  • 實施緩存。一旦確定了圖像的寬度,將其保存在 a分貝中,以便下次查看。
+0

謝謝我認爲我已經解決了這個問題。在開發解決方案時,我會發布它:D – hyperrjas 2012-02-26 09:14:57

1

看看Fast Image

FastImage通過獲取 少則需要

,然後查找給它的URI的圖像的尺寸或類型...

images.each do |src| 
     size = FastImage.size(src) 
     puts "width: #{size[0]}" 
     puts "height: #{size[1]}" 
    end 
end