class Imagetools::Imageconcat
Public Class Methods
get_image_files(opts, argv)
click to toggle source
# File lib/imagetools/imageconcat.rb, line 40 def self.get_image_files(opts, argv) image_files = [] # ディレクトリが処理対象かどうかを決める dir = nil if argv.size == 1 # 引き数が1個の場合は最初の引き数 path = File.expand_path(argv[0]) if FileTest.directory?(path) dir = path end elsif argv.size == 0 # 引き数がない場合カレントディレクトリ dir = File.expand_path('.') end if dir concat_number = opts[:n] || 2 # ディレクトリが指定されていた場合、指定ディレクトリ内のIMG_ファイルの最新n個を対象とする # 最新の基準は(ファイル名基準) match_files = Dir.glob("#{dir}/IMG_*.{jpg,jpeg,png}", File::FNM_CASEFOLD).sort # 後ろからn個を取得(小さい方の数とする) count = [match_files.size, concat_number].min image_files = match_files[-count..-1] else # それ以外は指定された引き数を全て対象とする argv.each do |arg| arg = File.expand_path(arg) if FileTest.file?(arg) && (arg =~ /\.jpe?g$/i || arg =~ /\.png/i) image_files << arg end end end image_files end
new(opts)
click to toggle source
# File lib/imagetools/imageconcat.rb, line 74 def initialize(opts) @opts = opts end
run(argv)
click to toggle source
# File lib/imagetools/imageconcat.rb, line 10 def self.run(argv) STDOUT.sync = true opts = {} opt = OptionParser.new(argv) opt.version = VERSION opt.banner = "Usage: #{opt.program_name} [-h|--help] <dir> or <image1 image2 image3 ...>" opt.separator('') opt.separator("Examples:") opt.separator(" #{opt.program_name} ~/tmp # concat two recent IMG_*jpg images.") opt.separator(" #{opt.program_name} image1.jpg image2.jpg image3.jpg # concat specified images.") opt.separator('') opt.separator("Options:") opt.on_head('-h', '--help', 'Show this message') do |v| puts opt.help exit end opt.on('-v', '--verbose', 'Verbose message') {|v| opts[:v] = v} opt.on('--dry-run', 'Message only') {|v| opts[:dry_run] = v} opt.on('-o OUTNAME', '--output=OUTNAME', 'Output file') {|v| opts[:o] = v} opt.on('-n NUM', '--number=NUM', 'Cancat image Number') {|v| opts[:n] = v.to_i} opt.parse!(argv) image_files = get_image_files(opts, argv) if image_files.size < 2 puts opt.help exit end command = Imageconcat.new(opts) command.run(image_files) end
Public Instance Methods
run(image_files)
click to toggle source
# File lib/imagetools/imageconcat.rb, line 78 def run(image_files) dirname = File.dirname(image_files[-1]) output_name = "photo.jpg" if @opts[:o] output_name = @opts[:o] end output_path = File.join(dirname, output_name) concat_images(image_files, output_path) end
Private Instance Methods
concat_images(image_files, output_file)
click to toggle source
# File lib/imagetools/imageconcat.rb, line 89 def concat_images(image_files, output_file) puts image_files.join("+") + "=#{output_file}" result_image_list = Magick::ImageList.new image_files.each do |image_file| #background_colorとflatten_imagesを組み合わせて背景色を指定 image_list = Magick::ImageList.new(image_file) {self.background_color = 'white'} image = image_list.flatten_images result_image_list << image end result = result_image_list.append(false) width = result.columns height = result.rows padding = 10 if height > 1000 padding = 20 end image_width = width / image_files.size result = result.splice(image_width, 0, padding, 0) # 画像を10字に切る if image_files.size > 2 result = result.splice(image_width * 2 + padding, 0, padding, 0) # 画像を10字に切るメソッドみたい end result.write output_file end