Skip to content

Commit

Permalink
add tmp folder
Browse files Browse the repository at this point in the history
  • Loading branch information
lilkraftwerk committed Dec 28, 2015
1 parent 39f42f0 commit f65388a
Show file tree
Hide file tree
Showing 6 changed files with 83 additions and 44 deletions.
63 changes: 47 additions & 16 deletions emojisaic.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,53 @@ def generate_emoji_map
end
end

def generate_emoji_gif(options)
gif = EmojiGifmaker(options)
gif.make_emoji_gif
end

def generate_still_image(options)

end

def get_options_from_command_line
opts = Slop.parse do |o|
o.string '-g', '--gif', '[string] gif filename'
o.string '-i', '--image', '[string] still image filename'
o.integer '-s', '--size', '[int] emoji height in pixels', default: 8
o.integer '-z', '--zoom', '[int] multiply size of original image by this', default: 1
o.integer '-o', '--offset', '[int] random offset for emoji placement, in pixels', default: 0
o.integer '-c', '--coverage', '[int] emoji offset for pixel coverage (see docs, it is complicated)', default: 0
o.bool '-q', '--quiet', '[flag] be quiet! no output in this mode'
o.bool '-h', '--help', '[flag] print options'
end

if opts[:help]
puts opts
exit
end

opts
end

def create_options_hash
opts = get_options_from_command_line
{ filename: opts[:filename],
quiet: opts[:quiet],
size: opts[:size],
zoom: opts[:zoom],
random_offset: opts[:offset]
coverage: opts[:coverage],
}
end

opts = create_options_hash
generate_emoji_gif(opts) if opts[:g]
generate_still_image(opts) if opts[:g]

### to do: preview option


##
## sample options hash
##
Expand All @@ -24,21 +71,5 @@ def generate_emoji_map
# }
# }

opts = Slop.parse do |o|
o.string '-g', '--gif', '[string] gif filename'
o.string '-i', '--image', '[string] still image filename'
o.integer '-s', '--size', '[int] emoji height in pixels', default: 8
o.integer '-z', '--zoom', '[int] multiply size of original image by this', default: 1
o.integer '-o', '--offset', '[int] random offset for emoji placement, in pixels', default: 0
o.integer '-c', '--coverage', '[int] emoji offset for pixel coverage (see docs, it is complicated)', default: 0
o.bool '-q', '--quiet', '[flag] be quiet! no output in this mode'
o.bool '-h', '--help', '[flag] print options'
end

if opts[:help]
puts opts
exit
end

p opts

2 changes: 1 addition & 1 deletion lib/emoji_finder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
##
class EmojiFinder
def initialize(options = {})
@options = options[:finder]
@options = options
@map = JSON.parse(File.open('lib/map.json').read)
@done_pixels = {}
end
Expand Down
41 changes: 22 additions & 19 deletions lib/gifmaker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,37 +3,40 @@
##
class GifMaker
def initialize(options = {})
@options = options
@filename = options[:filename]
@generator = EmojiMosaicGenerator.new(options)
make_filenames
end

def make_filenames(name)
@name = name
@filename = "input/#{@name}.gif"
def make_filenames
regex = %r{\/(.+)\.}
@name = regex.match(@filename)[1]
@new_filenames = []
end

def make_emoji_gif(name)
make_filenames(name)
def make_emoji_gif
@image = Magick::ImageList.new.read(@filename).coalesce
write_frames
@files.each_with_index do |filename, index|
puts "Doing frame #{index + 1}/#{@files.length}"
@new_filenames << @generator.create_image(filename)
puts "Doing frame #{index + 1}/#{@files.length}" unless @options[:quiet]
@new_filenames << @generator.create_image(@filename)
end
write_gif
@new_filenames.length
end

def make_preview(name, frames, start_at = 0)
old_gif = Magick::Image.read("output/#{name}.gif")
new_gif = Magick::ImageList.new
(start_at..start_at + frames).to_a.each do |frame_number|
new_gif << old_gif[frame_number]
end
output_dest = "output/#{name}-preview.gif"
new_gif.write(output_dest)
puts "wrote preview to #{output_dest}"
end
# commented out for now
# def make_preview(name, frames, start_at = 0)
# old_gif = Magick::Image.read("output/#{name}.gif")
# new_gif = Magick::ImageList.new
# (start_at..start_at + frames).to_a.each do |frame_number|
# new_gif << old_gif[frame_number]
# end
# output_dest = "output/#{name}-preview.gif"
# new_gif.write(output_dest)
# puts "wrote preview to #{output_dest}" unless @options[:quiet]
# end

def write_gif
gif = Magick::ImageList.new
Expand All @@ -44,12 +47,12 @@ def write_gif
gif << new_frame
end
dest = "output/#{@name}.gif"
puts "Writing to #{dest}..."
puts "Writing to #{dest}..." unless @options[:quiet]
gif.write(dest)
end

def write_frames
puts 'splitting gif into frames...'
puts 'splitting gif into frames...' unless @options[:quiet]
@files = []
@image.each_with_index do |image, index|
index > 9 ? number = index : number = "0#{index}"
Expand Down
14 changes: 7 additions & 7 deletions lib/image_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@
##
class EmojiMosaicGenerator
def initialize(options = {})
@options = options[:generator]
create_helpers(options)
@options = options
create_helpers
set_quality
end

def create_image(filename)
regex = %r{\/(.+)\.}
@name = regex.match(filename)[1]
assign_images_and_pixel_map(filename)
@bar = ProgressBar.new(@pixel_map.length, 'image generation')
@bar = ProgressBar.new(@pixel_map.length, 'image generation') unless @options[:quiet]
add_emojis_to_new_image
filename[@name] = "#{@name}-mosaic"
@new_image.write(filename)
Expand All @@ -31,7 +31,7 @@ def add_emojis_to_new_image
emoji = @finder.closest_emoji(p_map)
emoji.resize!(@emoji_size * @zoom, @emoji_size * @zoom)
@new_image.composite!(emoji, p_map.x, p_map.y, Magick::OverCompositeOp)
@bar.add(1)
@bar.add(1) unless @options[:quiet]
end
end

Expand All @@ -51,9 +51,9 @@ def randomize_offset(pixel)
pixel
end

def create_helpers(options)
@scanner = ImageScanner.new
@finder = EmojiFinder.new(options)
def create_helpers
@scanner = ImageScanner.new(@options)
@finder = EmojiFinder.new(@options)
end

def set_quality
Expand Down
6 changes: 5 additions & 1 deletion lib/image_scanner.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
## Scan an image and return a map of average colors
##
class ImageScanner
def initializer(options)
@options = options
end

def generate_pixel_map(image, emoji_size)
@image = image
@emoji_size = emoji_size
Expand Down Expand Up @@ -45,7 +49,7 @@ def scan_image
end
@x = 0
@y += @emoji_size
update
update unless @options[:quiet]
end
end

Expand Down
1 change: 1 addition & 0 deletions tmp/.placeholder
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.placeholder

0 comments on commit f65388a

Please sign in to comment.