ColdFusion8で簡単画像処理

先日、ColdFusion8プロフェッショナルガイドっていう本を買ったので、せっかくなのでちょっと読んで、ColdFusionってものがどんなものなのかを試してみました。
このColdFusionってのはサーバーサイドの言語でPHPの存在に近い感じです(HTMLタグに混ざって書くことができる)
こんな感じ
http://moeten.info/flex/etc/20080514_coldfusion/test.htm

ColdFusionの魅力は長くなりがちなプログラムがタグによりとても短くできます。
とあるページで、Javaでは100行かかるものがColdFusionでは10行って言っているくらいです。
簡単な画像処理ならこんな感じに書くことができます。

<cfset sourceImage = ExpandPath("haruhi.jpg")>
<cfset myImage = ImageRead(sourceImage)>
<cfset ImageGrayScale(myImage)>
<cfimage action="WriteToBrowser" source="#myImage#">

これだけで画像がグレースケールになります。
開発はDeamweaverが対応しているので便利です。
こんな感じにHTMLタグとCFタグを混ぜて書くことができます。

ColdFusion8のダウンロード(体験版あり)

screenshot

使える関数とサンプル一覧(ここを見ればとりあえず何ができるのかが把握しやすいです。

screenshot

ColdFusionの機能(PDF)

screenshot

ColdFusion8プロフェッショナルガイドのサンプルプログラムダウンロード

screenshot

参考にした本

ColdFusion 8 プロフェッショナルガイド

ColdFusion 8 プロフェッショナルガイド

FlexでRemoteObjectを使ったColdFusionとの連携がちょっとばっかし書かれてます。
AIRでの事例もあるので眺めるだけでもお得でっす。
基本的にはColdFusionで何ができるかが解説されてます。
DBへのアクセスとPDFの作成が便利。
#画像処理なお話はないよ\(゜ロ\)(/ロ゜)/
ちょっと長いですが、ColdFusionのソースです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- TemplateBeginEditable name="doctitle" -->
<title>test</title>
<!-- TemplateEndEditable -->
<!-- TemplateBeginEditable name="head" -->
<!-- TemplateEndEditable -->
<!--- Image Captcha --->
<h2>Captcha for "ColdFusion 8"</h2>
<cfimage action="captcha" height="60" text ="ColdFusion 8" width="340" difficulty="high">
<!--- Source Image --->
<cfset sourceImage = ExpandPath("haruhi.jpg")>
<h2>Original Image</h2>
<cfimage action="WriteToBrowser" source = "#sourceImage#">
<h2>Resized Image</h2>
<cfimage action="Resize" source = "#sourceImage#" height="70%" width="70%" name="imgVar">
<cfimage action="WriteToBrowser" source = "#imgVar#" >
<h2>Rotated Image</h2>
<cfimage action = "rotate" source = "#sourceImage#" angle = "40" name="imgVar">
<cfimage action="WriteToBrowser" source="#imgVar#">
<h2>Draw Line</h2>
<cfset myImage=ImageNew("",250,250)>
<cfset ImageSetDrawingColor(myImage,"cyan")>
<cfset ImageSetAntialiasing(myImage,"on")>
<cfset x = ArrayNew(1)>
<cfset y = ArrayNew(1)>
<cfset x[1] = "100">
<cfset x[2] = "50">
<cfset x[3] = "200">
<cfset x[4] = "100">
<cfset y[1] = "50">
<cfset y[2] = "100">
<cfset y[3] = "100">
<cfset y[4] = "200">
<cfset ImageDrawLines(myImage,x,y)>
<cfimage source=#myImage# action="writeToBrowser">
<h2>Draw Point</h2>
<cfset myImage=ImageNew("",200,200)>
<cfset ImageSetDrawingColor(myImage,"orange")>
<cfset ImageSetAntialiasing(myImage,"on")>
<cfset attr = StructNew()>
<cfset attr.width = 10>
<cfset ImageSetDrawingStroke(myImage,attr)>
<cfset ImageDrawPoint(myImage,100,100)>
<cfimage source="#myImage#" action="writeToBrowser">
<h2>Add Border</h2>
<cfset sourceImage = ExpandPath("haruhi.jpg")>
<cfset myImage = ImageRead(sourceImage)>
<cfset ImageAddBorder(myImage,3,"red")>
<cfimage action="WriteToBrowser" source="#myImage#">
<h2>Blur</h2>
<cfset myImage = ImageRead(sourceImage)>
<cfset ImageBlur(myImage,5)>
<cfimage action="WriteToBrowser" source="#myImage#">
<h2>Crop</h2>
<cfset myImage = ImageRead(sourceImage)>
<cfset ImageCrop(myImage,25,25,200,150)>
<cfimage action="WriteToBrowser" source="#myImage#">
<h2>Draw Circle</h2>
<cfset myImage = ImageRead(sourceImage)>
<cfset ImageSetDrawingColor(myImage,"##ff0000")>
<cfset ImageDrawArc(myImage,10,10,215,350,0,180,"no")>
<cfimage action="WriteToBrowser" source="#myImage#">
<h2>Draw Rect</h2>
<cfset myImage = ImageRead(sourceImage)>
<cfset ImageSetDrawingColor(myImage,"##999999")>
<cfset ImageDrawBeveledRect(myImage,45,30,165,140,"yes","yes")>
<cfimage action="WriteToBrowser" source="#myImage#">
<h2>Draw Path Line</h2>
<cfset myImage = ImageRead(sourceImage)>
<cfset ImageSetDrawingColor(myImage,"green")>
<cfset ImageDrawCubicCurve(myImage,120,380,5,15,380,28,32,56)>
<cfimage action="WriteToBrowser" source="#myImage#">
<h2>Draw</h2>
<cfset myImage=ImageNew("",200,110)>
<cfset ImageSetDrawingColor(myImage,"green")>
<cfset ImageSetAntialiasing(myImage,"on")>
<cfset ImageDrawOval(myImage,5,5,190,100,"yes")>
<cfimage source="#myImage#" action="writeToBrowser">
<h2>Draw</h2>
<cfset myImage=ImageNew("",201,201)>
<cfset ImageSetDrawingColor(myImage,"red")>
<cfset ImageSetAntialiasing(myImage,"on")>
<cfset attr=StructNew()>
<cfset attr.width = 10>
<cfset ImageSetDrawingStroke(myImage,attr)>
<cfset ImageDrawLine(myImage,40,40,165,165)>
<cfset ImageDrawOval(myImage,5,5,190,190)>
<cfimage source="#myImage#" action="writeToBrowser">
<h2>Flip</h2>
<cfset myImage = ImageRead(sourceImage)>
<cfset ImageSetAntialiasing(myImage,"on")>
<cfset ImageFlip(myImage,"270")>
<cfimage action="WriteToBrowser" source="#myImage#">
<h2>Gray</h2>
<cfset myImage = ImageRead(sourceImage)>
<cfset ImageGrayScale(myImage)>
<cfimage action="WriteToBrowser" source="#myImage#">
<h2>Image Info</h2>
<cfset myImage = ImageRead(sourceImage)>
<Cfdump var="#ImageInfo(myImage)#">
<h2>Negate</h2>
<cfset myImage = ImageRead(sourceImage)>
<cfset ImageNegative(myImage)>
<cfimage action="WriteToBrowser" source="#myImage#">
<h2>Marge</h2>
<cfset overlayImage = ExpandPath("rakisuta.jpg")>
<cfset myImage = ImageRead(sourceImage)>
<cfset ImageSetAntialiasing(myImage,"on")>
<cfset myImage2 = ImageRead(overlayImage)>
<cfimage action="WriteToBrowser" source="#myImage#">
<h2>Sharpen</h2>
<cfset myImage = ImageRead(sourceImage)>
<cfset ImageSharpen(myImage,2)>
<cfset ImageSetAntialiasing(myImage,"on")>
<cfimage action="WriteToBrowser" source="#myImage#">
<cfset myImage = ImageRead(sourceImage)>
<cfset ImageShear(myImage,1,"horizontal")>
<cfset ImageSetAntialiasing(myImage,"on")>
<cfimage action="WriteToBrowser" source="#myImage#">
<cfset myImage = ImageRead(sourceImage)>
<cfset ImageSetAntialiasing(myImage,"on")>
<cfset ImageShearDrawingAxis(myImage,0.5,0.5)>
<cfset ImageSetDrawingColor(myImage,"blue")>
<cfset ImageDrawRect(myImage,45,15,75,75,"yes")>
<cfset ImageSetAntialiasing(myImage,"on")>
<cfimage action="WriteToBrowser" source="#myImage#">
<cfset myImage = ImageRead(sourceImage)>
<cfset ImageSetAntialiasing(myImage,"on")>
<cfset ImageTranslate(myImage,50,10)>
<cfset ImageSetAntialiasing(myImage,"on")>
<cfimage action="WriteToBrowser" source="#myImage#">
<cfset myImage = ImageRead(sourceImage)>
<cfset ImageSetAntialiasing(myImage,"on")>
<cfset ImageTranslateDrawingAxis(myImage,100,20)>
<cfset ImageSetDrawingColor(myImage,"blue")>
<cfset ImageDrawRect(myImage,50,60,40,50,"yes")>
<cfset ImageSetAntialiasing(myImage,"on")>
<cfimage action="WriteToBrowser" source="#myImage#">
</head>
<body>
</body>
</html>