Saturday, July 28, 2012

groovyで立体的な星を描画する

groovyで立体的な星を描画するには、以下のコードを実行します。
@Grab(group='com.jhlabs', module='filters', version='2.0.235')
@Grab(group='org.codehaus.griffon', module='jsilhouette-geom', version='0.4')
import java.awt.*
import java.awt.image.*
import java.io.*
import javax.imageio.*
import com.jhlabs.composite.*
import com.jhlabs.image.*
import org.codehaus.griffon.jsilhouette.geom.*

// 立体的な星を描画する
def img = new BufferedImage(
    200, 200, BufferedImage.TYPE_INT_ARGB
)
def gr = img.createGraphics()
gr.setRenderingHint(
  RenderingHints.KEY_ANTIALIASING,
  RenderingHints.VALUE_ANTIALIAS_ON
)
def radius1 = 100
def radius2 = 50
def angle = 0
def star = new Star(img.getWidth()/2, img.getHeight()/2,
  radius1, radius2, 5, angle
)
gr.setColor(new Color((int)0xeedd00))
gr.fill(star)
gr.dispose()

def lc = new LinearColormap(0xeedd00, 0xffffff)
def sf = new ShapeFilter()
sf.setColormap(lc)
img = sf.filter(img, null)

ImageIO.write(img, "png", new File("drawstar2.png"))


出力画像


動作環境
groovy 1.8.6, JDK7 update4

groovyで市松模様を描画する

groovyで市松模様を描画するには、以下のコードを実行します。
@Grab(group='com.jhlabs', module='filters', version='2.0.235')
import java.awt.*
import java.awt.image.*
import java.io.*
import javax.imageio.*
import com.jhlabs.composite.*
import com.jhlabs.image.*

// 市松模様画像を生成する
def img = new BufferedImage(
    200, 200, BufferedImage.TYPE_INT_ARGB
)
CheckFilter cf = new CheckFilter()
// 前景色
cf.setForeground((int)0xffffffff)
// 背景色
cf.setBackground((int)0xffccddff)
// xサイズ
cf.setXScale(16)
// yサイズ
cf.setYScale(16)
// あいまいさ
cf.setFuzziness(20)
// 角度
cf.setAngle((float)45f/180f*ImageMath.PI)

img = cf.filter(img, null)

ImageIO.write(img, "png", new File("drawchecker.png"))


出力画像


動作環境
groovy 1.8.6, JDK7 update4

groovyで画像にストライプ枠をつける

groovyで画像にストライプ枠をつけるには、以下のコードを実行します。
import java.awt.*
import java.awt.image.*
import java.awt.geom.*
import java.io.*
import javax.imageio.*

// ストライプ枠を描画する
def img = ImageIO.read(new File("sf2.jpg"))

def bwidth = 10

def img2 = new BufferedImage(
  img.getWidth()+bwidth*2, img.getHeight()+bwidth*2, 
  BufferedImage.TYPE_INT_ARGB
)
def gr = img2.createGraphics()
gr.setRenderingHint(
  RenderingHints.KEY_ANTIALIASING,
  RenderingHints.VALUE_ANTIALIAS_ON
)
def dx = 200
def linewidth = 16
def interval = 44

gr.setColor(new Color((int)0x26261E))
gr.fillRect(0, 0, img2.getWidth(), img2.getHeight())

gr.setStroke(new BasicStroke(linewidth))
gr.setColor(new Color((int)0xffc92c))

for(int lx=-dx;lx<(img2.getWidth());lx+=interval){
  gr.drawLine(lx, 0, lx+dx, img2.getHeight())
}
gr.drawImage(img, bwidth, bwidth, null)
gr.dispose()

ImageIO.write(img2, "png", new File("stripeborder.png"))


元画像

出力画像


動作環境
groovy 1.8.6, JDK7 update4

groovyで花を描画する

groovyで花を描画するには、以下のコードを実行します。
import java.io.*
import java.awt.*
import java.awt.geom.*
import java.awt.image.*
import javax.imageio.*

// 花を描画する
def img = new BufferedImage(
    200, 200, BufferedImage.TYPE_INT_ARGB
)
def gr = img.createGraphics()
gr.setRenderingHint(
  RenderingHints.KEY_ANTIALIASING,
  RenderingHints.VALUE_ANTIALIAS_ON
)
gr.setColor(new Color((int)0xff8793))
def path = new Path2D.Double()

// 分割数
def par = 8
// 中心x
def cx = img.getWidth()/2
// 中心y
def cy = img.getHeight()/2
// 制御点半径(大)
def rad1 = 100
// 半径(小)
def rad2 = 40

def dr1=0
def dr2=360/(par*2)
path.moveTo(
  (int)(cx-Math.cos(2*Math.PI*-dr2/360)*rad2),
  (int)(cy-Math.sin(2*Math.PI*-dr2/360)*rad2)
)
  path.quadTo(
    (cx-Math.cos(2*Math.PI*dr1/360)*rad1),
    (cy-Math.sin(2*Math.PI*dr1/360)*rad1),
    (cx-Math.cos(2*Math.PI*dr2/360)*rad2),
    (cy-Math.sin(2*Math.PI*dr2/360)*rad2)
  )
dr1 += 360/par
dr2 += 360/par

while(dr2<360){
  path.quadTo(
    (cx-Math.cos(2*Math.PI*dr1/360)*rad1),
    (cy-Math.sin(2*Math.PI*dr1/360)*rad1),
    (cx-Math.cos(2*Math.PI*dr2/360)*rad2),
    (cy-Math.sin(2*Math.PI*dr2/360)*rad2)
  )

  dr1 += 360/par
  dr2 += 360/par
}
gr.fill(path)
gr.dispose()

ImageIO.write(img, "png", new File("flower.png"))

出力画像


動作環境
groovy 1.8.6, JDK7 update4

Tuesday, July 24, 2012

groovyで画像に光沢をつける

groovyで画像に光沢をつけるには、以下のコードを実行します。
@Grab(group='com.jhlabs', module='filters', version='2.0.235')
import java.awt.*
import java.awt.image.*
import java.awt.geom.*
import java.io.*
import javax.imageio.*
import com.jhlabs.composite.*
import com.jhlabs.image.*

// 画像に光沢をつける
def img = ImageIO.read(new File("sf2.jpg"))
def img2 = new BufferedImage(
  img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB
)
// 半透明グラデーション作成
def gr = img2.createGraphics()
gr.setRenderingHint(
  RenderingHints.KEY_ANTIALIASING,
  RenderingHints.VALUE_ANTIALIAS_ON
)
GradientPaint gp = new GradientPaint(
  0, 0,
  new Color(0xff, 0xff, 0xff, 0xc0),
  0, (int)img.getHeight()*2/3,
  new Color(0xff, 0xff, 0xff, 0x00)
)
gr.setPaint(gp)
def path = new Path2D.Double()
path.moveTo(img.getWidth(), 0)
path.lineTo((int)img.getWidth()*2/3, 0)
path.lineTo(img.getWidth(), (int)img.getHeight()*2/3)
gr.fill(path)
gr.dispose()

// 明るさを75% 
def ctf = new ContrastFilter()
ctf.setBrightness(0.75f)
img = ctf.filter(img, null)

gr = img.createGraphics()
gr.drawImage(img2,0,0,null)
gr.dispose()

ImageIO.write(img, "png", new File("gloss.png"))


元画像

出力画像


動作環境
groovy 1.8.6, JDK7 update4