2011-05-08 55 views
20

我使用圖像化寶石來檢查遠程圖像的大小,然後只將足夠大的圖像插入到數組中。快速獲取遠程圖像尺寸的方法

require 'open-uri' 
require 'image_size' 
data = Nokogiri::HTML(open(url)) 
images = [] 
forcenocache = Time.now.to_i # No cache because jquery load event doesn't fire for cached images 
data.css("img").each do |image| 
    image_path = URI.join(site, URI.encode(image[:src])) 
    open(image_path, "rb") do |fh| 
    image_size = ImageSize.new(fh.read).get_size() 
    unless image_size[0] < 200 || image_size[1] < 100 
     image_element = "<img src=\"#{image_path}?#{forcenocache}\">" 
     images.push(image_element) 
    end 
    end 
end 

我試圖在前端使用JS來檢查圖像尺寸,但似乎有一個瀏覽器限制一次可以加載多少圖像。

使用imagesize做它比使用JS慢得多。任何更好更快的方法來做到這一點?

+0

我建議取爲 小發現給它的URI的 圖像的大小或類型是 - 在第一找到頁面上的所有圖像鏈接並過濾掉重複項。很可能,只加載一張圖片將會起作用(少數第一千字節) - 試試這個。另外,您可以使用線程並行檢查多個圖像。可能在設置尺寸的頁面上有一些img標籤。 – taro 2011-05-08 17:46:18

+0

爲了使用open-uri獲得大小,人們將如何去讀取前n千字節的圖像? – 2011-05-10 05:00:11

+0

這裏是鏈接到我的相關問題http://stackoverflow.com/questions/1120350/how-to-download-via-http-only-piece-of-big-file-with-ruby – taro 2011-05-10 12:32:32

回答

45

我認爲這種寶石你想要做什麼https://github.com/sdsykes/fastimage

FastImage根據需要

+1

我只想說。 ..我偶然發現了這個答案,因此,這個寶石。這是不可思議的。 +1 +1 +1 +1 +1 !!! – Dudo 2013-08-29 03:01:57