lib/sinatra/assetpack/image.rb
module Sinatra
module AssetPack
# An image.
#
# == Common usage
#
# i = Image['/app/images/background.png'] # Local file path
#
# i.dimensions # Tuple for [ width, height ]
# i.width
# i.height
#
# i.dimensions? # True if dimensions are available
# # (e.g., if ImageMagick is installed and working)
#
class Image
# Looks up an image.
# This makes each image only have one associated instance forever.
def self.[](fname)
fname = File.expand_path(fname) || fname
@cache ||= Hash.new
@cache[fname] ||= new fname
end
def initialize(file)
@file = file
end
def dimensions
return @dimensions unless @dimensions.nil?
dim = /(\d+) x (\d+)/.match(`file "#{@file}"`)
w, h = dim[1,2]
if w.to_i != 0 && h.to_i != 0
@dimensions = [w.to_i, h.to_i]
else
@dimensions = false
end
rescue => e
@dimensions = false
end
def dimensions?
!! dimensions
end
def width
dimensions? && dimensions[0]
end
def height
dimensions? && dimensions[1]
end
end
end
end