Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何从图片url获取大小或重量?_Ruby On Rails_Ruby_Screen Scraping_Mechanize - Fatal编程技术网

Ruby on rails 如何从图片url获取大小或重量?

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

关于上一个问题

我想知道如何通过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
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,这样你下次就可以查到了
      看一看

      FastImage通过获取给定uri的图像来查找其大小或类型 尽可能少

      然后

      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