Fast way to get remote image dimensions

Aen Tan picture Aen Tan · May 8, 2011 · Viewed 10.1k times · Source

I'm using the imagesize gem to check the sizes of remote images and then only push images that are big enough into an array.

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

I tried using JS on the front-end to check image dimensions but there seems to be a browser limit to how many images can be loaded at once.

Doing it with imagesize is much slower than using JS. Any better and faster ways to do this?

Answer

Luqman picture Luqman · May 18, 2011

I think this gem does what you want https://github.com/sdsykes/fastimage

FastImage finds the size or type of an image given its uri by fetching as little as needed