Class: FastImage
- Inherits:
-
Object
- Object
- FastImage
- Includes:
- FastImageParsing
- Defined in:
- lib/fastimage/version.rb,
lib/fastimage/fastimage.rb
Defined Under Namespace
Classes: BadImageURI, CannotParseImage, FastImageException, ImageFetchFailure, SizeNotFound, UnknownImageType
Constant Summary collapse
- VERSION =
'2.4.0'
- DefaultTimeout =
2
- LocalFileChunkSize =
256
- SUPPORTED_IMAGE_TYPES =
Parsers.keys.freeze
Instance Attribute Summary collapse
-
#bytes_read ⇒ Object
readonly
Returns the value of attribute bytes_read.
Class Method Summary collapse
-
.animated?(uri, options = {}) ⇒ Boolean
Returns a boolean value indicating the image is animated.
-
.size(uri, options = {}) ⇒ Object
Returns an array containing the width and height of the image.
-
.type(uri, options = {}) ⇒ Object
Returns an symbol indicating the image type fetched from a uri.
Instance Method Summary collapse
- #animated ⇒ Object
- #content_length ⇒ Object
-
#fetch ⇒ Object
find an appropriate method to fetch the image according to the passed parameter.
- #height ⇒ Object
-
#initialize(uri, options = {}) ⇒ FastImage
constructor
A new instance of FastImage.
- #orientation ⇒ Object
- #size ⇒ Object
- #type ⇒ Object
- #width ⇒ Object
Methods included from FastImageParsing
Constructor Details
#initialize(uri, options = {}) ⇒ FastImage
Returns a new instance of FastImage.
185 186 187 188 189 190 191 192 193 |
# File 'lib/fastimage/fastimage.rb', line 185 def initialize(uri, ={}) @uri = uri @options = { :timeout => DefaultTimeout, :raise_on_failure => false, :proxy => nil, :http_header => {} }.merge() end |
Instance Attribute Details
#bytes_read ⇒ Object (readonly)
Returns the value of attribute bytes_read.
25 26 27 |
# File 'lib/fastimage/fastimage.rb', line 25 def bytes_read @bytes_read end |
Class Method Details
.animated?(uri, options = {}) ⇒ Boolean
Returns a boolean value indicating the image is animated. It will return nil if the image could not be fetched, or if the image type was not recognised.
By default there is a timeout of 2 seconds for opening and reading from a remote server. This can be changed by passing a :timeout => number_of_seconds in the options.
If you wish FastImage to raise if it cannot find the type of the image for any reason, then pass :raise_on_failure => true in the options.
Example
require 'fastimage'
FastImage.animated?("test/fixtures/test.gif")
=> false
FastImage.animated?("test/fixtures/animated.gif")
=> true
Supported options
- :timeout
-
Overrides the default timeout of 2 seconds. Applies both to reading from and opening the http connection.
- :raise_on_failure
-
If set to true causes an exception to be raised if the image type cannot be found for any reason.
181 182 183 |
# File 'lib/fastimage/fastimage.rb', line 181 def self.animated?(uri, ={}) new(uri, ).animated end |
.size(uri, options = {}) ⇒ Object
Returns an array containing the width and height of the image. It will return nil if the image could not be fetched, or if the image type was not recognised.
By default there is a timeout of 2 seconds for opening and reading from a remote server. This can be changed by passing a :timeout => number_of_seconds in the options.
If you wish FastImage to raise if it cannot size the image for any reason, then pass :raise_on_failure => true in the options.
FastImage knows about GIF, JPEG, BMP, TIFF, ICO, CUR, PNG, HEIC/HEIF, AVIF, PSD, SVG, WEBP and JXL files.
Example
require 'fastimage'
FastImage.size("https://switchstep.com/images/ios.gif")
=> [196, 283]
FastImage.size("http://switchstep.com/images/ss_logo.png")
=> [300, 300]
FastImage.size("https://upload.wikimedia.org/wikipedia/commons/0/09/Jpeg_thumb_artifacts_test.jpg")
=> [1280, 800]
FastImage.size("https://eeweb.engineering.nyu.edu/~yao/EL5123/image/lena_gray.bmp")
=> [512, 512]
FastImage.size("test/fixtures/test.jpg")
=> [882, 470]
FastImage.size("http://switchstep.com/does_not_exist")
=> nil
FastImage.size("http://switchstep.com/does_not_exist", :raise_on_failure=>true)
=> raises FastImage::ImageFetchFailure
FastImage.size("http://switchstep.com/images/favicon.ico", :raise_on_failure=>true)
=> [16, 16]
FastImage.size("http://switchstep.com/foo.ics", :raise_on_failure=>true)
=> raises FastImage::UnknownImageType
FastImage.size("http://switchstep.com/images/favicon.ico", :raise_on_failure=>true, :timeout=>0.01)
=> raises FastImage::ImageFetchFailure
FastImage.size("http://switchstep.com/images/faulty.jpg", :raise_on_failure=>true)
=> raises FastImage::SizeNotFound
Supported options
- :timeout
-
Overrides the default timeout of 2 seconds. Applies both to reading from and opening the http connection.
- :raise_on_failure
-
If set to true causes an exception to be raised if the image size cannot be found for any reason.
111 112 113 |
# File 'lib/fastimage/fastimage.rb', line 111 def self.size(uri, ={}) new(uri, ).size end |
.type(uri, options = {}) ⇒ Object
Returns an symbol indicating the image type fetched from a uri. It will return nil if the image could not be fetched, or if the image type was not recognised.
By default there is a timeout of 2 seconds for opening and reading from a remote server. This can be changed by passing a :timeout => number_of_seconds in the options.
If you wish FastImage to raise if it cannot find the type of the image for any reason, then pass :raise_on_failure => true in the options.
Example
require 'fastimage'
FastImage.type("https://switchstep.com/images/ios.gif")
=> :gif
FastImage.type("http://switchstep.com/images/ss_logo.png")
=> :png
FastImage.type("https://upload.wikimedia.org/wikipedia/commons/0/09/Jpeg_thumb_artifacts_test.jpg")
=> :jpeg
FastImage.type("https://eeweb.engineering.nyu.edu/~yao/EL5123/image/lena_gray.bmp")
=> :bmp
FastImage.type("test/fixtures/test.jpg")
=> :jpeg
FastImage.type("http://switchstep.com/does_not_exist")
=> nil
File.open("/some/local/file.gif", "r") {|io| FastImage.type(io)}
=> :gif
FastImage.type("test/fixtures/test.tiff")
=> :tiff
FastImage.type("test/fixtures/test.psd")
=> :psd
Supported options
- :timeout
-
Overrides the default timeout of 2 seconds. Applies both to reading from and opening the http connection.
- :raise_on_failure
-
If set to true causes an exception to be raised if the image type cannot be found for any reason.
153 154 155 |
# File 'lib/fastimage/fastimage.rb', line 153 def self.type(uri, ={}) new(uri, ).type end |
Instance Method Details
#animated ⇒ Object
226 227 228 229 230 |
# File 'lib/fastimage/fastimage.rb', line 226 def animated @property = :animated fetch unless defined?(@animated) @animated end |
#content_length ⇒ Object
232 233 234 235 236 |
# File 'lib/fastimage/fastimage.rb', line 232 def content_length @property = :content_length fetch unless defined?(@content_length) @content_length end |
#fetch ⇒ Object
find an appropriate method to fetch the image according to the passed parameter
239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 |
# File 'lib/fastimage/fastimage.rb', line 239 def fetch raise BadImageURI if @uri.nil? if @uri.respond_to?(:read) fetch_using_read(@uri) elsif @uri.start_with?('data:') fetch_using_base64(@uri) else begin @parsed_uri = URI.parse(@uri) rescue URI::InvalidURIError fetch_using_file_open else if @parsed_uri.scheme == "http" || @parsed_uri.scheme == "https" fetch_using_http else fetch_using_file_open end end end raise SizeNotFound if @options[:raise_on_failure] && @property == :size && !@size rescue Timeout::Error, SocketError, Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::ECONNRESET, Errno::ENETUNREACH, ImageFetchFailure, Net::HTTPBadResponse, EOFError, Errno::ENOENT, OpenSSL::SSL::SSLError raise ImageFetchFailure if @options[:raise_on_failure] rescue UnknownImageType, BadImageURI, CannotParseImage raise if @options[:raise_on_failure] ensure @uri.rewind if @uri.respond_to?(:rewind) end |
#height ⇒ Object
222 223 224 |
# File 'lib/fastimage/fastimage.rb', line 222 def height size && @size[1] end |
#orientation ⇒ Object
213 214 215 216 |
# File 'lib/fastimage/fastimage.rb', line 213 def orientation size unless defined?(@size) @orientation ||= 1 if @size end |
#size ⇒ Object
201 202 203 204 205 206 207 208 209 210 211 |
# File 'lib/fastimage/fastimage.rb', line 201 def size @property = :size begin fetch unless defined?(@size) rescue CannotParseImage end raise SizeNotFound if @options[:raise_on_failure] && !@size @size end |
#type ⇒ Object
195 196 197 198 199 |
# File 'lib/fastimage/fastimage.rb', line 195 def type @property = :type fetch unless defined?(@type) @type end |
#width ⇒ Object
218 219 220 |
# File 'lib/fastimage/fastimage.rb', line 218 def width size && @size[0] end |