参考上一个问题methods width and height Mechanize
我想知道如何通过Mechanize从网页图片获取大小。
我已经创建了一个像helper一样使用的方法,但是这个过程很慢,例如。
url = "http://www.birchbox.com"
page = Mechanize.new.get(url)
images_url = page.images.map{|img| img.url.to_s }.compact
这是辅助方法:
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
如果宽度较小的100px,此方法将从阵列中删除所有图像。
此方法的问题在于进程非常慢。使用此方法加载我的页面时间太长。
使用Mechanize有什么快速简便的方法吗?
答案 0 :(得分:1)
如果你想要图像的实际尺寸,你将不得不去取它。
正如您所说,这可能需要很长时间。加快这种情况的一种方法是不获取整个图像,而是逐步获取它并在它到来时解析它。只要有足够的图像来确定图像大小,就可以停止阅读图像。
这相当复杂,可能不会一直有效,因为对于某些图像类型,您需要完全获取图像才能知道尺寸(我认为)。
答案 1 :(得分:1)
我同意smparkes,它很复杂,它可能不会给你速度优势。但是这里有一些想法可以加快速度:
答案 2 :(得分:1)
FastImage通过提取来查找给定其uri的图像的大小或类型 尽可能少
然后......
images.each do |src|
size = FastImage.size(src)
puts "width: #{size[0]}"
puts "height: #{size[1]}"
end
end