Как я могу получить размер или вес из URL изображения? - PullRequest
0 голосов
/ 26 февраля 2012

со ссылкой на предыдущий вопрос методы ширина и высота Механизация

Я хотел бы знать, как я могу получить размер изображений веб-страницы с помощью Mechanize.

Я создал метод для использования как помощник, но процесс очень медленный, например,

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

Этот метод удаляет все изображения из массива, если они имеют меньшую ширину 100 пикселей.

Проблема этого метода в том, что процесс очень медленный. Моя страница загружается этим методом слишком долго.

Есть ли какой-нибудь быстрый и простой способ сделать это с помощью Mechanize?

Ответы [ 3 ]

1 голос
/ 26 февраля 2012

Я согласен с smparkes, это достаточно сложно, чтобы, вероятно, не дать вам преимущество в скорости. Но вот несколько идей, чтобы ускорить процесс:

  • Проверьте размер файла. Сначала загрузите изображение во временный файл, и вы сможет пропустить что-нибудь меньше, чем 1 КБ или около того.
  • Анализ имени файла. Вы знаете, чтобы пропустить spacer.gif, но как насчет имен как my_tiny_image_20x20.gif
  • Загрузка одновременно. Это сложно, но вы можете использовать eventmachine для загружайте изображения одновременно.
  • Реализация кеша. Как только вы определите ширину изображения, сохраните его в дБ, так что вы можете просто посмотреть его в следующий раз.
1 голос
/ 31 января 2013

Взгляните на Быстрое изображение

FastImage находит размер или тип изображения с учетом его URI, выбирая столько, сколько нужно

А потом ...

images.each do |src|
         size = FastImage.size(src)
         puts "width: #{size[0]}"
         puts "height: #{size[1]}"
     end
end
1 голос
/ 26 февраля 2012

Если вам нужен реальный размер изображения, вам придется его получить.

Как вы заметили, это может занять много времени.Один из способов ускорить это - не извлекать все изображение, а вместо этого извлекать его постепенно и анализировать по мере поступления.Вы можете прекратить чтение изображения, как только у вас его хватит, чтобы определить его размер.

Это довольно сложно и, вероятно, не будет работать постоянно, поскольку для некоторых типов изображений вам нужно будет извлечьизображение полностью, чтобы узнать размер (я думаю).

...