Canvasで描いた絵をクラシックASPでサーバー上に保存する方法

このブログでCanvasについてよく扱っていたタイミングで、会社からCanvasを用いた編集ツールを作ることになりました。ただし、うちの会社で使っているサーバーは少し古めのIISで、現状サーバープログラミングはクラシックASPしか使えないようです。
ただ、Canvasで作った画像はサーバーに保存しなければいけないので、その方法を調べる必要がありました。Canvasの画像データ自体はBase64にして得られるものの、そのBase64の文字列をデコードしてファイルとして保存する必要があります。そこで見つけたのが、BASP21 DLLというASP上で扱えるコンポーネント。どうやら、Base64でファイルをデコードする機能もあるようです(わざわざ、Base64の文字列を入れたテキストファイルを作る必要があるようですが)。とりあえずやってみたものの、小さい画像ではうまくいきましたが、ちょっと大きくなるとダメでした(確か、200px*200pxぐらいだともうダメだったかと)。

正直ちょっと諦めかけて、LhaplusみたいなBase64デコード対応のソフトをWScript.Shellで操作するのがいいんじゃないか。なんて思っていた所、下記のサイトを発見。
ScrapCode/VBS/BASE64 – 備忘録
ASPはVBSで書かれているので、この方法でうまくいくかもしれません。なぜXMLを読み込んだり書き込んだりするためのMicrosoft.XMLDOMというオブジェクトでBase64のデコードができるのか謎なのですが、とりあえず試してみました。

以下、サンプルコード。

<%
' http://apis.jpn.ph/fswiki/wiki.cgi?page=ScrapCode/VBS/BASE64
Const adTypebinary = 1' バイナリデータ
Const adTypeText = 2' テキストデータ

Dim distFile
distFile = "C:\inetpub\wwwroot\Canvas\test.png" '作成するファイル

Dim stream, xmldom, node
Set xmldom = Server.CreateObject("Microsoft.XMLDOM")
Set node = xmldom.CreateElement("base64")
node.DataType = "bin.base64"

node.Text = Replace(Request.Form("acceptImage"), "data:image/png;base64,","") 'Base64の文字列を渡す

Set stream = Server.CreateObject("ADODB.Stream")
stream.Type = adTypeBinary
stream.Open
stream.write node.NodeTypedValue
stream.saveToFile distFile, 2 'ファイルを作成
stream.Close
Set stream = Nothing

Set node = Nothing
Set xmldom = Nothing
%>

CanvasのHTMLは、前に作った、canvasを使ったお絵描き投稿システムを利用し、投稿先URLを、”image-accept.php”ではなく、”image-accept.asp”として試してみました。acceptImageというパラメータで、Canvasから得られたBase64 URLを渡すようにしています
結果、うまくいったようです。実際に使う時にはファイルパスとBase64の文字列を渡して、ファイルを作成する関数を作ったほうがいいかもしれませんね。

コメント

タイトルとURLをコピーしました