画像処理を試したいなと思ってました。
以下の本を読んでHTML5+JavaScriptで行うのは良さそうだなと思って、環境構築した時のメモ。
C#でデスクトップアプリも考えていたのですが、保守性とか後先考えずに小規模でごちゃごちゃ動かすならば動的型付けのJavaScriptが良いと判断しました。
環境構築
以下の記事のように残念ながらhtmlとpngファイルという最小構成で挑むつもりでしたが、getImageDataなどのメソッドがWebサーバー経由でないとエラーとなってしまいます。(参考サイト)
Chromeに起動引数をつけて実行とか、Visual Studioでのプレビューなどとあるのですが、素直にWebサーバーを構築した方が良さそうです。
今回は、C#のASP.NET CoreのWebアプリケーションを構築することにしました。結局はC#を使うんです。
私が単にC#が得意でVisual Studioに慣れ親しんでいるという理由です。
肝心なのは HTML5で画像処理すればもっとも効率良く画像処理をあれこれできるという目的への最短距離を選ぶべきです。
エンジニアたるもの手段と目的を取り違えるべからず。。。
手順
Visual Studioでプロジェクトを新規作成します。
ASP.NET Core Webアプリケーションを選択します。.NET Frameworkでも良いのですが、特に理由がなければ.NET Coreでしょう。
プロジェクトテンプレートは「Webアプリケーション」で作成します。
Webアプリケーションが構築されました。
とりあえず画像処理
画像ファイルを反転させる画像処理を試してみることにします。
imagesフォルダに画像ファイルを追加します。
Pagesフォルダを右クリックして「追加」-「Razorページ」を選択して「追加」ボタンを押します。
PageModelクラスの作成、レイアウトページを使用するは、不要なのでチェックを外してReverseページを作成します。
ファイルの内容を以下のように書き換えます。
@page @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>ピクセルの色に応じて色を変える</title> <script> function start() { var canvas = document.getElementById('canvas'); var context = canvas.getContext('2d'); var image = new Image(); image.onload = function () { context.drawImage(image, 0, 0); var imageData = context.getImageData(0, 0, image.width, image.height); var pixel = imageData.data; var width = 4 * imageData.width; var height = imageData.height / 2; for (var i = 0; i < width * height; i += 4) { // R,G,Bを反転させる for (var j = 0; j < 3; j++) { pixel[i + j] = 255 - pixel[i + j]; } } context.putImageData(imageData, 0, 0); } image.src = "../../images/Image.png"; } </script> </head> <body onload="start()"> <canvas id="canvas" width="1920" height="1080"> Canvasをサポートしたブラウザを使用してください。 </canvas> </body> </html>
デバッグ実行を行います。
"https://localhost:xxxxx"の末尾に"/Reverse"をつけて"https://localhost:xxxxx/Reverse"にアクセスします。
以下のように画面の上部の色が反転しました。
あとは、start関数をあれこれやって画像処理を行っていくだけです。
リポジトリは以下です。
ボツネタ
当初はNode.jsを構築するつもりでした。
Node.js+Expressの環境構築
下記を参考にNode.jsとフレームワークのExpressを構築します。
npm install express
npm install express-generator
node_modules/.bin/express
npm install
npm start
「http://localhost:3000/」 へアクセスします。
以後、起動は
npm start
で、「http://localhost:3000/」 へアクセスします。
ただ、Expressの構文を勉強する必要がありそうなので、今回は見送りました。
Node.jsが良いとかC#が良いとかではなく、今回、肝心なのはHTML5+JavaScriptで画像処理をすることが目的なので。