Ruby on rails 如何从图片url获取大小或重量?
关于上一个问题 我想知道如何通过Mechanize从网页图像中获取尺寸 我已经创建了一个类似helper的方法,但是过程非常缓慢,例如Ruby on rails 如何从图片url获取大小或重量?,ruby-on-rails,ruby,screen-scraping,mechanize,Ruby On Rails,Ruby,Screen Scraping,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_ur
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
def检查图像大小
图片_url.每个都做|图片_url|
image=MiniMagick::image.open(image\u url)
如果图像[:宽度]<100
images_url.delete(“#{images_url}”)
结束
结束
返回图像和URL
结束
如果图像的宽度小于100px,此方法将从阵列中删除所有图像
这种方法的问题是过程非常缓慢。使用此方法加载我的页面花费的时间太长。
使用Mechanize有没有快速简便的方法可以做到这一点?如果您想要图像的真实大小,您必须获取它 正如你所指出的,这可能需要很长时间。加速这一过程的一种方法是不获取整个图像,而是逐步获取图像并在图像出现时对其进行解析。一旦有足够的图像来确定其大小,就可以停止读取图像
这相当复杂,可能不会一直工作,因为对于某些图像类型,您需要完整地获取图像以了解其大小(我认为)。如果您想要图像的真实大小,则必须获取它 正如你所指出的,这可能需要很长时间。加速这一过程的一种方法是不获取整个图像,而是逐步获取图像并在图像出现时对其进行解析。一旦有足够的图像来确定其大小,就可以停止读取图像
这相当复杂,可能不会一直工作,因为对于某些图像类型,您需要完整地获取图像以了解其大小(我认为)。我同意SMParks,它足够复杂,可能不会给您带来速度优势。但这里有一些加快速度的想法:
- 检查文件大小。首先将映像下载到临时文件,然后 将能够跳过任何小于1Kb左右的内容
- 分析文件名。你知道跳过spacer.gif,但是名字呢 像我的_tiny_image_20x20.gif
- 同时下载。这很棘手,但您可以使用eventmachine 同时下载图像
- 实现缓存。确定图像的宽度后,将其保存在 一个db,这样你下次就可以查到了
- 检查文件大小。首先将映像下载到临时文件,然后 将能够跳过任何小于1Kb左右的内容
- 分析文件名。你知道跳过spacer.gif,但是名字呢 像我的_tiny_image_20x20.gif
- 同时下载。这很棘手,但您可以使用eventmachine 同时下载图像
- 实现缓存。确定图像的宽度后,将其保存在 一个db,这样你下次就可以查到了
- 我同意斯帕克斯的观点,它足够复杂,可能不会给你带来速度优势。但这里有一些加快速度的想法:
images.each do |src|
size = FastImage.size(src)
puts "width: #{size[0]}"
puts "height: #{size[1]}"
end
end
看看
FastImage通过获取给定uri的图像来查找其大小或类型
尽可能少
然后
images.each do |src|
size = FastImage.size(src)
puts "width: #{size[0]}"
puts "height: #{size[1]}"
end
end
当你说<100时,你是指图像的真实大小,还是指某人在查看页面时图像的显示方式。它们不一样。我指的是图像的真实大小:当你说<100时,你是指图像的真实大小,还是指某人在查看页面时图像的显示方式。它们不一样。我指的是图像的真实大小:DMy的主要问题是机械化获取像素大小为1x1的图像,或者图像作为图标、我不想显示的化身……等等。我需要这些图片。例如,spacer.gif之类的图像在布局旧网页时会留下空白。然后我想知道如何过滤这种图像类型…对于你的要求,没有简单的答案。你甚至不想要真正的图像大小,你想要的是如图所示的大小(因为大图像可以显示小图像,反之亦然),这需要解释CSS(可能还有javascript)。您可以使用headless浏览器(有一些基于webkit的)。但正如我所说,这都不是小事。我的主要问题是机械化获取像素大小为1x1的图像,或者将图像作为图标、我不想显示的化身……等等。我需要这些图片。例如,spacer.gif之类的图像在布局旧网页时会留下空白。然后我想知道如何过滤这种图像类型…对于你的要求,没有简单的答案。你甚至不想要真正的图像大小,你想要的是如图所示的大小(因为大图像可以显示小图像,反之亦然),这需要解释CSS(可能还有javascript)。您可以使用headless浏览器(有一些基于webkit的)。但是就像我说的,这都不是小事。谢谢你,我想我已经解决了这个问题。在开发解决方案时,我会发布:DThank you我想我已经解决了这个问题。在开发解决方案时,我将发布它:D