質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

204閲覧

publicディレクトリに置いたrbファイルをコントローラから実行したい

naoya.n

総合スコア26

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2018/05/30 07:50

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ruby

1`#{RbConfig.ruby} "#{Rails.public_path.join 'Rmagick.rb'}" test.png` 2# もしくは 3system(RbConfig.ruby, Rails.public_path.join('Rmagick.rb'), "test.png")

Active Jobなどでバックグラウンド処理した方がいいと思いますけどね

投稿2018/05/30 08:42

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naoya.n

2018/05/31 01:52

ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問