Class: CartoCSSHelper::FullSetOfComparedImages

Inherits:
Object
  • Object
show all
Defined in:
lib/cartocss_helper/visualise_changes_diff_from_images.rb

Instance Method Summary collapse

Constructor Details

#initialize(before, after, header, filename, image_size) ⇒ FullSetOfComparedImages

Returns a new instance of FullSetOfComparedImages.



35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/cartocss_helper/visualise_changes_diff_from_images.rb', line 35

def initialize(before, after, header, filename, image_size)
  @header = header
  @filename = filename
  @compared = compress(before, after)

  @image_size = image_size
  @margin = 10
  @standard_pointsize = 10
  @header_space = @standard_pointsize * 1.5
  @diff_note_space = @standard_pointsize

  render
end

Instance Method Details

#compress(before, after) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
# File 'lib/cartocss_helper/visualise_changes_diff_from_images.rb', line 49

def compress(before, after)
  returned = [PairOfComparedImages.new(before[0], after[0])]
  (1...before.length).each do |i|
    if before[i].identical(before[i - 1]) && after[i].identical(after[i - 1])
      returned[-1].merge_description_from_next_image(before[i])
    else
      returned.push(PairOfComparedImages.new(before[i], after[i]))
    end
  end
  return returned
end

#create_canvasObject



72
73
74
75
76
77
# File 'lib/cartocss_helper/visualise_changes_diff_from_images.rb', line 72

def create_canvas
  y = get_needed_y
  x = @image_size * 2 + 3 * @margin

  @canvas = Magick::Image.new(x, y)
end

#get_needed_yObject



79
80
81
82
83
84
85
86
87
88
# File 'lib/cartocss_helper/visualise_changes_diff_from_images.rb', line 79

def get_needed_y
  y = 0
  y += @header_space
  y += @margin * 1.5
  y += @diff_note_space
  y += @margin * 0.5
  y += @compared.length * (@image_size + @margin)
  y += @diff_note_space
  return y
end


154
155
156
# File 'lib/cartocss_helper/visualise_changes_diff_from_images.rb', line 154

def popup
  @canvas.display
end

#read_image_from_disk(filename) ⇒ Object



103
104
105
106
107
108
109
110
111
# File 'lib/cartocss_helper/visualise_changes_diff_from_images.rb', line 103

def read_image_from_disk(filename)
  return Magick::Image.read(filename)[0]
rescue Magick::ImageMagickError => e
  # for example on loading corrupted empty file (for example CartoCSSHelper was interuppted during writing to disk...)
  puts "reading image <#{filename}> from disk failed"
  puts e.class
  puts e
  raise e
end

#renderObject



61
62
63
64
65
66
67
68
69
70
# File 'lib/cartocss_helper/visualise_changes_diff_from_images.rb', line 61

def render
  create_canvas
  offset = 0
  render_header
  offset += @header_space + @margin * 1.5
  offset += @diff_note_space + @margin * 0.5
  render_images_with_labels offset
  offset += @compared.length * (@margin + @image_size)
  render_footer offset
end


147
148
149
150
151
152
# File 'lib/cartocss_helper/visualise_changes_diff_from_images.rb', line 147

def render_footer(y_offset)
  label_drawer = Magick::Draw.new
  label_drawer.pointsize(@standard_pointsize)
  label_drawer.text(@margin, y_offset, 'generated using https://github.com/matkoniecz/CartoCSSHelper')
  label_drawer.draw(@canvas)
end

#render_headerObject



90
91
92
93
94
95
# File 'lib/cartocss_helper/visualise_changes_diff_from_images.rb', line 90

def render_header
  header_drawer = Magick::Draw.new
  header_drawer.pointsize(@header_space * 3 / 5)
  header_drawer.text(@margin, @header_space, @header)
  header_drawer.draw(@canvas)
end

#render_images_with_labels(y_offset) ⇒ Object



97
98
99
100
101
# File 'lib/cartocss_helper/visualise_changes_diff_from_images.rb', line 97

def render_images_with_labels(y_offset)
  (0...@compared.length).each do |i|
    render_row_of_labelled_images(@compared[i], y_offset + i * (@margin + @image_size))
  end
end

#render_label(y_offset, label) ⇒ Object



130
131
132
133
134
135
# File 'lib/cartocss_helper/visualise_changes_diff_from_images.rb', line 130

def render_label(y_offset, label)
  label_drawer = Magick::Draw.new
  label_drawer.pointsize(@standard_pointsize)
  label_drawer.text(@margin, y_offset, label)
  label_drawer.draw(@canvas)
end

#render_row_of_images(y_offset, left_image, right_image) ⇒ Object

noinspection RubyResolve



138
139
140
141
142
143
144
145
# File 'lib/cartocss_helper/visualise_changes_diff_from_images.rb', line 138

def render_row_of_images(y_offset, left_image, right_image)
  if left_image == right_image
    @canvas.composite!(left_image, @margin * 1.5 + @image_size / 2, y_offset, Magick::OverCompositeOp)
  else
    @canvas.composite!(left_image, @margin, y_offset, Magick::OverCompositeOp)
    @canvas.composite!(right_image, @margin * 2 + @image_size, y_offset, Magick::OverCompositeOp)
  end
end

#render_row_of_labelled_images(processed, y_offset) ⇒ Object



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/cartocss_helper/visualise_changes_diff_from_images.rb', line 113

def render_row_of_labelled_images(processed, y_offset)
  left_image = read_image_from_disk(processed.left_file_location)
  right_image = read_image_from_disk(processed.right_file_location)
  drawer = Magick::Draw.new
  drawer.pointsize(@diff_note_space * 4 / 5)
  if left_image == right_image
    drawer.text(@margin + @image_size / 2, y_offset, "#{processed.description} - unchanged")
    drawer.draw(@canvas)
  else
    drawer.text(@margin, y_offset, "#{processed.description} - before")
    drawer.draw(@canvas)
    drawer.text(@margin * 2 + @image_size, y_offset, "#{processed.description} - after")
    drawer.draw(@canvas)
  end
  render_row_of_images(y_offset, left_image, right_image)
end

#saveObject



158
159
160
# File 'lib/cartocss_helper/visualise_changes_diff_from_images.rb', line 158

def save
  @canvas.write(@filename)
end