今回は、画像ファイルをそのままアップロードするのではなくリサイズしてからアップロードする方法を考えます。

前提として、ファイルをアップロードするだけなら以下の方法でできます。

upload.php

HTML部分

今回はそのままアップロードするのではなくリサイズしてからアップロードする方法を考えます。

HTML部分を示します。

ファイルが選択されたらcanvasに画像を描画します。そしてアップロードボタンがクリックされたらcanvasに描画されているものをアップロードします。

JavaScript部分

主なグローバル変数と定数は以下のとおりです。

ページが読み込まれたときの処理

ページが読み込まれたらラジオボタンの一番上が選択されている状態にします。

選択されているファイルが変更されたときの処理

選択されているファイルが変更されたらcanvasに画像を描画します。このとき画像でないものを選択するとエラーが発生するので、このときはisImageフラグをfalseにしてcanvasにはなにも描画しないことにします。

canvasに画像を描画する処理

canvasに画像を描画する処理を示します。

isImageフラグをチェックしてtrueであればdrawOptionによって画像をそのままのサイズで、またはサイズ変更して描画処理をおこない、falseの場合は黒で塗りつぶす処理だけをおこないます。

ラジオボタンの状態が変化したらどれが選択されているかを調べて、適切な状態で画像を描画しなおします。

canvasに描画されている画像をアップロードする

アップロードボタンがクリックされたら画像ファイルが選択されている場合はcanvasに描画されている画像をサーバーに送信します。upload.phpですが、冒頭のものをそのまま使ってもよいし、node.js + PHP ユーザーがアップロードした不適切な画像を削除するの最後のほうに示しているものを使えば不適切な画像のみ自動で削除することもできます。

また画像ファイルを選択するときは非表示になっているcanvasを再表示させ、アップロードの結果を表示している要素を非表示にします。