RailsでRMagickを使ったWEBアプリを開発しています。
publicフォルダ内にtest.pngという画像と、
Rmagick.rbという画像にテキストを加えるためのファイルを置いています。
このrmagick.rbをコントローラから引数を渡して実行することはできますか??
viewで、あるボタンが押されてページ遷移する際に画像生成して、次のページで加工後の画像を表示しようと考えています。
ruby
1require 'fileutils' 2require 'RMagick' 3 4# メッセージ 5MSG_USAGE = "USAGE: ruby write_copyright.rb filename" 6MSG_NOT_EXIST = "File not exist!" 7 8# 描画文字列 9OUT_STR = "zzzzzzzzzzzzz" 10OUT_STR2 = "yyyyyyyyyyyyy" 11OUT_STR3 = "xxxxxxxxxxxxxx" 12 13class Arg 14 # 引数取得 15 def get_arg 16 begin 17 if ARGV[0] 18 # ファイルが存在しなければ終了 19 unless File.exist?(ARGV[0]) 20 puts MSG_NOT_EXIST + " #{ARGV[0]}" 21 exit 22 end 23 else 24 # 引数無ければ終了 25 puts MSG_USAGE 26 exit 27 end 28 29 # ファイル名返却 30 return ARGV[0] 31 rescue => e 32 STDERR.puts "[ERROR][#{self.class.name}.get_arg] #{e}" 33 exit 1 34 end 35 end 36end 37 38class WriteCopyright 39 def initialize(filename) 40 @img_file = filename 41 end 42 43 # テキスト描画 44 def write_copyright(columns = 5) 45 FileUtils.cp(@img_file, "2"+@img_file, {:preserve => true}) # 元画像退避 46 img = Magick::ImageList.new(@img_file) # 画像オブジェクト 47 draw = Magick::Draw.new # 描画オブジェクト 48 49 50 51 begin 52 draw.annotate(img, 0, 0, 70, 320, OUT_STR3.scan(/.{1,#{30}}/).join("\n")) do 53 self.font = FONT_JP # フォント 54 self.fill = 'white' # フォント塗りつぶし色(白) 55 self.stroke = 'transparent' # フォント縁取り色(透過) 56 self.pointsize = 24 # フォントサイズ(16pt) 57 self.gravity = Magick::NorthWestGravity # 描画基準位置(右下) 58 end 59 60 draw.annotate(img, 0, 0, 70, 165, OUT_STR2.scan(/.{0,44}[a-z.!?,;](?:\b|$)/mi).join("\n") ) do 61 self.font = FONT2 # フォント 62 self.fill = 'white' # フォント塗りつぶし色(白) 63 self.stroke = 'transparent' # フォント縁取り色(透過) 64 self.pointsize = 44 # フォントサイズ(16pt) 65 self.gravity = Magick::NorthWestGravity # 描画基準位置(右下) 66 end 67 68 draw.annotate(img, 0, 0, 68, 55, OUT_STR) do 69 self.font = FONT # フォント 70 self.fill = 'white' # フォント塗りつぶし色(白) 71 self.stroke = 'transparent' # フォント縁取り色(透過) 72 self.pointsize = 24 # フォントサイズ(16pt) 73 self.gravity = Magick::NorthWestGravity # 描画基準位置(右下) 74 end 75 76 # 画像生成 77 img.write("2"+@img_file) 78 rescue => e 79 STDERR.puts "[ERROR][#{self.class.name}.write_copyright] #{e}" 80 exit 1 81 end 82 end 83end 84 85# 引数取得 86obj_arg = Arg.new 87filename = obj_arg.get_arg 88 89# Copyright 描画 90obj_main = WriteCopyright.new(filename) 91obj_main.write_copyright 92 93
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/31 01:52