ImageInfo
ImageInfo finds the size and type of a single or multiple images from the web by fetching as little data as needed (partial image) in batches.
Why
In LinkThumbnailer I needed to find images sizes not only for one image. A well known gem like FastImage was not enough so I decided to build my own. The gem use typhoeus's parallel requests and stream capability under the hood to get images.
Installation
Add this line to your application's Gemfile:
gem 'image_info'And then execute:
$ bundle
Or install it yourself as:
$ gem install image_info
Usage
For a single image:
image = ImageInfo.from('http://foo.com/foo.png').first
image.width
=> 256
image.height
=> 256
image.size
=> [256, 256]
image.type
=> :png
image.uri
=> #<URI::HTTP:0x007fe7dccc1390 URL:http://foo.com/foo.png>For multiple images:
images = ImageInfo.from(['http://foo.com/foo.png', 'http://foo.com/bar.jpg'])
images.map &:size
=> [[256, 256], [128, 128]]
images.map &:type
=> [:png, :jpeg]Configuration
Concurrency
You can configure the max_concurrency value (20 by default) used to fetch images in parallel:
ImageInfo.configure do |config|
config.max_concurrency = 10
endor at runtime:
ImageInfo.from('http://foo.com/foo.png', max_concurrency: 10)Image Size Limit
You can set a max_image_size for which the connection will be aborted
if reached.
ImageInfo.configure do |config|
config.max_image_size = 5 * 1024 * 1024 # 5Mb
endor at runtime:
ImageInfo.from('http://foo.com/foo.png', max_image_size: -1)Setting the value to zero or a negative number simply disable the limit.
By default it is set to -1.
Development
After checking out the repo, run bin/setup to install dependencies. Then, run rake test to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/gottfrois/image_info.
License
The gem is available as open source under the terms of the MIT License.