CGI経由でImageMagickを起動するよりはオーバーヘッドも少なかろうということで、RMagickを試してみる。
標準添付のサンプルコードはあるけど、ぐぐって見ても日本語の情報がほとんどなく、実際の使用例がいまいち不足している感じ。まぁ、一番足りないのは当人のプログラミング能力な訳だが、そこには目をつぶることにしている。
ということで、CGI内でRMagickを使って、アップロードしたファイルを変換するサンプルコードを恥を忍んで晒してみる。
CGI部
#!/usr/local/bin/rubyrequire "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内で好きに加工できる、という話。
たったコレだけのコードなのに、まともに動くようにするまでに何日かかったかは秘密だ(笑)