2011-05-08 2 views
20

J'utilise la gemme imagesize pour vérifier la taille des images à distance et ensuite seulement pousser des images qui sont assez grandes dans un tableau.Façon rapide d'obtenir des dimensions d'image à distance

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 

J'ai essayé avec JS sur le front-end pour vérifier les dimensions d'image, mais il semble y avoir une limite de navigateur pour nombre d'images pouvant être chargées à la fois.

Le faire avec imagesize est beaucoup plus lent que d'utiliser JS. Des moyens meilleurs et plus rapides pour le faire?

+0

Mes recommandations - au premier trouver tous les liens d'image sur une page et filtrer les doublons. Probablement, le chargement d'un seul morceau d'image fonctionnera (quelques premiers kilo-octets) - essayez ceci. En outre, vous pouvez utiliser des threads pour vérifier plusieurs images en parallèle. Probablement, il existe des balises img sur une page avec des dimensions définies. – taro

+0

Comment procéder pour lire les premiers kilo-octets de l'image pour obtenir la taille en utilisant open-uri? –

+0

voici un lien vers ma question connexe http://stackoverflow.com/questions/1120350/how-to-download-via-http-only-piece-of-big-file-with-ruby – taro

Répondre

45

Je pense que ce petit bijou fait ce que vous voulez https://github.com/sdsykes/fastimage

FastImage trouve la taille ou le type d'une image donné ses uri en allant chercher comme peu au besoin

+1

Je veux juste dire. .. Je suis tombé sur cette réponse, et à cet effet, cette gemme. C'est incroyable. +1 +1 +1 +1 +1 !!! – Dudo

Questions connexes