class Spritey::Spritey

Attributes

images[RW]
max_height[RW]

Public Class Methods

new() click to toggle source
# File lib/spritey.rb, line 8
def initialize
  @images = []
  @max_height = 0
end

Public Instance Methods

add_image(filename) click to toggle source
# File lib/spritey.rb, line 13
def add_image(filename)
  image = load_image(filename)
  @max_height = image.rows unless image.rows < @max_height
  @images.push image
end
concatenate(dest_image_filename) click to toggle source
# File lib/spritey.rb, line 32
def concatenate(dest_image_filename)
  raise RuntimeError unless @images.any?

  new_image = Magick::Image.new(total_width,@max_height){
    self.format = 'png'
    self.background_color = 'none'
  }
  
  last_width = 0

  @images.each do |img|
    img.alpha Magick::BackgroundAlphaChannel
    new_image.composite!(img,last_width, 0, Magick::OverCompositeOp )
    last_width += img.columns      
  end
  puts "Total image size #{total_width},#{@max_height}"    
  new_image.write(dest_image_filename)
end
generate_sprites_css(filename) click to toggle source
# File lib/spritey.rb, line 51
def generate_sprites_css(filename)
  last_width = 0
  dest_css = ""
  @images.each do |img|
    image_name = Pathname.new(img.filename).basename.to_s.split(".")
    dest_css += "##{image_name[0]} {"
    dest_css += "display:block;"
    dest_css += "width:#{img.columns}px;"
    dest_css += "height:#{img.rows}px;"      
    dest_css += "background-image:url(#{filename}.png);"
    dest_css += "background-repeat:no-repeat;"      
    dest_css += "background-position: -#{last_width}px 0px ;"      
    dest_css += "}\n"
    last_width += img.columns
  end
  dest_css
end
load_image(filename) click to toggle source
# File lib/spritey.rb, line 28
def load_image(filename)
  Magick::Image::read(filename)[0]    
end
save_css(filename) click to toggle source
# File lib/spritey.rb, line 21
def save_css(filename)
  concatenate(filename + ".png")
  css_file = File.open(filename +".css", "w")
  css_file.write generate_sprites_css(filename)
  css_file.close
end
total_width() click to toggle source
# File lib/spritey.rb, line 69
def total_width
  width = 0
  @images.each do |image|
    width += image.columns
  end
  width
end