Index > JythonとJava2Dを使って、CD-ROMアイコンを作成
Mon, September 29, 2008

JythonとJava2Dを使って、CD-ROMアイコンを作成

前回(JythonとJava2Dを使って、すばやくイメージ素材を作成(ただしプログラマ向け)) のコードを利用して、今回CD-ROMアイコンを作成してみました。

アイコン

完成したCD-ROMアイコン

48x48 32x32 16x16

Windows用アイコンファイル

(クリエイティブ・コモンズ・ライセンス)

CD-ROMイメージを生成するjythonコード

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


false=0
true=1


def createImage(size):
    type=awtimage.BufferedImage.TYPE_4BYTE_ABGR
    bimg=awtimage.BufferedImage(size.width,size.height,type)
    return bimg

def paint(g,mysize):

    ptCenter=awt.Point( mysize.width/2,mysize.height/2 )



    g.setStroke(awt.BasicStroke(0.2))

    ell=awt.geom.Ellipse2D.Float(0,0,mysize.width-1,mysize.height-1)

    # paint background cdrom
    g.setColor(awt.Color.WHITE)
    g.fill(ell)


    # paint light on disk
    keepClip=g.getClip()
    g.setClip(ell)

    #
    # light-1
    #

    c1=awt.Color.YELLOW
    pol=awt.Polygon()
    pol.addPoint( 0, lang.Float(mysize.height*0.2).intValue() )
    pol.addPoint( lang.Float(mysize.width*0.2).intValue(), 0 )
    pol.addPoint( ptCenter.x,ptCenter.y )

    g.setColor(c1)
    g.fill(pol)


    pol=awt.Polygon()
    pol.addPoint( mysize.width, mysize.height-lang.Float(mysize.height*0.2).intValue() )
    pol.addPoint( mysize.width-lang.Float(mysize.width*0.2).intValue(), mysize.height )
    pol.addPoint( ptCenter.x,ptCenter.y )

    g.setColor(c1)
    g.fill(pol)



    #
    # light-2
    #

    c2=awt.Color.GREEN;

    pol=awt.Polygon()
    pol.addPoint( 0, lang.Float(mysize.height*0.2).intValue() )
    pol.addPoint( 0, lang.Float(mysize.height*0.5).intValue() )
    pol.addPoint( ptCenter.x,ptCenter.y )

    g.setColor(c2)
    g.fill(pol)


    pol=awt.Polygon()
    pol.addPoint( mysize.width, mysize.height-lang.Float(mysize.height*0.2).intValue() )
    pol.addPoint( mysize.width, lang.Float(mysize.height*0.5).intValue() )
    pol.addPoint( ptCenter.x,ptCenter.y )

    g.setColor(c2)
    g.fill(pol)


    g.setClip(keepClip)




    # paint cdrom
    g.setColor(awt.Color(102,102,128,100)) # paint as transparent
    g.fill(ell)

    # paint cdrom border
    g.setColor(awt.Color(128,128,102,100))
    g.draw(ell)


    gap=mysize.width*(3.0/4.0)

    ell=awt.geom.Ellipse2D.Float(gap/2,gap/2,mysize.width-gap,mysize.height-gap)
    g.setColor(awt.Color.WHITE)
    g.fill(ell)


outf=None
widthAndHeight=None

try:
    outf=sys.argv[1]
    widthAndHeight=sys.argv[2]
except :
    print "Usage: jython paintcdrom.py outputfile.png size"

if outf==None or widthAndHeight==None :
    sys.exit()


w=lang.Integer(widthAndHeight).intValue()
h=w
mysize=awt.Dimension(w,h)

bimg=createImage(mysize)
g=bimg.getGraphics()
g.setRenderingHint(awt.RenderingHints.KEY_ANTIALIASING,awt.RenderingHints.VALUE_ANTIALIAS_ON)
paint(g,mysize)
g.dispose()

fos=io.FileOutputStream( outf )
imageio.ImageIO.write(bimg,"PNG",fos)
fos.close()

ダウンロード

生成方法

出力するPNG画像ファイル名とそのサイズを指定します。

$ jython paintcdrom.py cdrom48.png 48

この例では、48x48サイズのCD-ROMアイコンを生成します。

 Twitter
follow me on Twitter
 Categories