58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
# File 'lib/cryptopunks.rb', line 58
def run( args )
opts = { zoom: 1,
outdir: '.',
file: './punks.png',
offset: 0,
}
parser = OptionParser.new do |cmd|
cmd.banner = "Usage: punk (or cryptopunk) [options] IDs"
cmd.separator " Mint punk characters from composite (#{opts[:file]}) - for IDs use 0 to 9999"
cmd.separator ""
cmd.separator " Options:"
cmd.on("-z", "--zoom=ZOOM", "Zoom factor x2, x4, x8, etc. (default: #{opts[:zoom]})", Integer ) do |zoom|
opts[:zoom] = zoom
end
cmd.on("-d", "--dir=DIR", "Output directory (default: #{opts[:outdir]})", String ) do |outdir|
opts[:outdir] = outdir
end
cmd.on("-f", "--file=FILE", "True Official Genuine CryptoPunks™ composite image (default: #{opts[:file]})", String ) do |file|
opts[:file] = file
end
cmd.on("--offset=NUM", "Start counting at offset (default: #{opts[:offset]})", Integer ) do |offset|
opts[:offset] = offset
end
cmd.on("-h", "--help", "Prints this help") do
puts cmd
exit
end
end
parser.parse!( args )
puts "opts:"
pp opts
puts "==> reading >#{opts[:file]}<..."
punks = Image::Composite.read( opts[:file] )
puts " setting zoom to #{opts[:zoom]}x" if opts[:zoom] != 1
FileUtils.mkdir_p( opts[:outdir] ) unless Dir.exist?( opts[:outdir] )
args.each_with_index do |arg,index|
punk_index = arg.to_i
punk = punks[ punk_index ]
punk_name = "punk-" + "%04d" % (punk_index + opts[:offset])
if opts[:zoom] != 1
punk = punk.zoom( opts[:zoom] )
punk_name << "x#{opts[:zoom]}"
end
path = "#{opts[:outdir]}/#{punk_name}.png"
puts "==> (#{index+1}/#{args.size}) minting punk ##{punk_index+opts[:offset]}; writing to >#{path}<..."
punk.save( path )
end
puts "done"
end
|