class ShatteredMachine::Transpose
Use the transpose algorithm from pnglitch on a given png image.
Constants
- ALL_FILTERS
Public Class Methods
new(options = {})
click to toggle source
@param options [Hash] options for transpose algorithm
# File lib/shattered_machine/transpose.rb, line 10 def initialize(options = {}) @filter = define_filter(options[:filter]) || 'average' @transpose_force = options[:transpose_force] || 'half' end
Public Instance Methods
call(input_image, output_image)
click to toggle source
@param input_image [string] path for image @param output_image [string] path for output transposed image @return [boolean] status of transpose
# File lib/shattered_machine/transpose.rb, line 18 def call(input_image, output_image) PNGlitch.open(input_image) do |png| filtered_glitch(png, @filter).save output_image end output_image end
Private Instance Methods
define_filter(filter_from_options)
click to toggle source
# File lib/shattered_machine/transpose.rb, line 27 def define_filter(filter_from_options) return filter_from_options unless filter_from_options == 'random' ALL_FILTERS[rand(5)] end
filtered_glitch(png, custom_filter)
click to toggle source
# File lib/shattered_machine/transpose.rb, line 33 def filtered_glitch(png, custom_filter) png.each_scanline do |scanline| scanline.change_filter custom_filter end png.glitch do |data| transpose_data(data) end end
full_transpose(data, qis)
click to toggle source
# File lib/shattered_machine/transpose.rb, line 53 def full_transpose(data, qis) data[qis * 2, qis] + data[0, qis] + data[qis * 3..-1] + data[qis * 1, qis] end
half_transpose(data, qis)
click to toggle source
# File lib/shattered_machine/transpose.rb, line 49 def half_transpose(data, qis) data[0, qis] + data[qis * 2, qis] + data[qis * 1, qis] + data[qis * 3..-1] end
transpose_data(data)
click to toggle source
# File lib/shattered_machine/transpose.rb, line 42 def transpose_data(data) quarter_image_size = data.size / 4 return half_transpose(data, quarter_image_size) if @transpose_force == 'half' full_transpose(data, quarter_image_size) end