Module: Imogen::Iiif::Tiles

Defined in:
lib/imogen/iiif/tiles.rb

Class Method Summary collapse

Class Method Details

.for(img, dest_dir, format = :jpeg, tile_size = 128, override = false) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/imogen/iiif/tiles.rb', line 8

def self.for(img,dest_dir,format=:jpeg,tile_size=128,override=false)
  width, height = img.width, img.height
  max_level = Imogen::Zoomable.levels_for(width,height,tile_size)
  max_level.downto(0) do |level|
    scale = 0.5**level
    level_width = (img.width*scale).ceil 
    level_width = (img.height*scale).ceil 
    region_size = (tile_size / scale).ceil
    region_width = (scale * img.width).ceil
    region_height = (scale * img.height).ceil
    x, col = 0, 0
    while x < width
      y, row = 0, 0
      while y < height
        region = "#{x},#{y},#{[width-x,region_size].min},#{[height-y,region_size].min}"
        size = "full"
        dest_path = File.join(dest_dir,region,size,'0',"native.#{Imogen::Iiif::FORMATS[format]}")
        unless File.exists? dest_path or override
          yield(img,dest_path,format,Imogen::Iiif.path_to_opts(dest_path,dest_dir))
        end
        y += region_size
        row += 1
      end
      x += region_size
      col += 1
    end
  end
end

.scale_factor_for(*dims) ⇒ Object



5
6
7
# File 'lib/imogen/iiif/tiles.rb', line 5

def self.scale_factor_for(*dims)
  Imogen::Zoomable.levels_for(*dims)**2
end