CGIでRMagick

CGI経由でImageMagickを起動するよりはオーバーヘッドも少なかろうということで、RMagickを試してみる。

標準添付のサンプルコードはあるけど、ぐぐって見ても日本語の情報がほとんどなく、実際の使用例がいまいち不足している感じ。まぁ、一番足りないのは当人のプログラミング能力な訳だが、そこには目をつぶることにしている。

ということで、CGI内でRMagickを使って、アップロードしたファイルを変換するサンプルコードを恥を忍んで晒してみる。

CGI

#!/usr/local/bin/ruby

require "cgi"

require "RMagick"

include Magick

f_name=ENV["UNIQUE_ID"] + ".png"

formData = CGI.new

print "Content-type: text/html\n\n"

img = Magick::Image.from_blob(formData['imgData'].read).first

# Image format = png

img.format = "PNG"

img.write(f_name)



print "Upload End"

HTML部

<html>

<head>

<title>Ruby CGI Sample</title>

</head>

<body>

<form method="post" action="./sample.cgi" enctype="multipart/form-data">

Image<input type="file" name="imgData"><br>

<nput type="submit" value="Upload">

</form>

</body>

</html>

ま、要はform-dataで受け取ったStringIOオブジェクトをそのままMagick::Image.from_blobでImageオブジェクトにぶち込んでしまえば、後はRMagick内で好きに加工できる、という話。

たったコレだけのコードなのに、まともに動くようにするまでに何日かかったかは秘密だ(笑)