デスクトップ向けのアプリケーションの仕事で最後の仕上げに、ツールバーのアイコンやプログラムの起動アイコンなどを作成しなければなりません。
アイコンデータをデザイナーさんに頼めると楽なのですが、そうではない場合、プログラマが作成します。(わたしの場合)
普通はイラストレータなどを使ってつくると思いますが、マウスでちまちまやるのがわたしは苦手です。
そこで、Java2Dを使って、イメージデータもJavaでつくるという手がありますが、はっきりいってイメージデータのためだけにJavaでコーディングするのは面倒すぎです。
そこで、Java2Dは使いたい、しかし手間はかけたくない、ということで、jythonとJava2D の組合わせでイメージデータを生成してみましたので、そのコードをメモしておきます。

import sys import java.lang as lang import java.io as io import java.awt as awt import java.awt.image as awtimage import javax.imageio as imageio mysize=awt.Dimension(100,100) def createImage(size): type=awtimage.BufferedImage.TYPE_4BYTE_ABGR bimg=awtimage.BufferedImage(size.width,size.height,type) return bimg def paint(g): g.setColor(awt.Color.WHITE) g.fill(awt.Rectangle(mysize.width,mysize.height)) g.setColor(awt.Color.BLACK) g.draw(awt.Rectangle(mysize.width-1,mysize.height-1)) msg="Hello World." w=g.getFontMetrics().stringWidth(msg) h=g.getFontMetrics().getHeight() x=(mysize.width-w)/2 y=(mysize.height-h)/2 g.drawString(msg,x,y) outf=None try: outf=sys.argv[1] except : print "Usage: jython image.py outputfile.png" if outf==None: sys.exit() bimg=createImage(mysize) g=bimg.getGraphics() g.setRenderingHint(awt.RenderingHints.KEY_ANTIALIASING,awt.RenderingHints.VALUE_ANTIALIAS_ON) paint(g) g.dispose() fos=io.FileOutputStream( outf ) imageio.ImageIO.write(bimg,"PNG",fos) fos.close()
$ jython image.py test.png
一度 image.py を書いてしまえば、あとはグラフィック描画部分のコードだけを
書き換えてやることで、なんどでも使い回すことができます。
def paint(g) :
g.setColor(awt.Color.WHITE)
g.fill(awt.Rectangle(mysize.width,mysize.height))
g.setColor(awt.Color.BLACK)
g.draw(awt.Rectangle(mysize.width-1,mysize.height-1))
msg="Hello World."
w=g.getFontMetrics().stringWidth(msg)
h=g.getFontMetrics().getHeight()
x=(mysize.width-w)/2
y=(mysize.height-h)/2
g.drawString(msg,x,y)
MindBoard は 直観的な操作で簡単にマインドマップを描くことができる Android タブレット用アプリです。