Saturday, May 12, 2012

groovyで画像をバッジ型に切り取る

groovyで画像をバッジ型に切り取るには、以下のコードを実行します。
import java.io.*
import java.awt.*
import java.awt.geom.*
import java.awt.image.*
import javax.imageio.*

// 画像をバッジ型に切り取る
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.setColor(new Color(1F, 1F, 1F, 1F))
def path = new Path2D.Double()

// 分割数
def par = 64
// 中心x
def cx = img.getWidth()/2
// 中心y
def cy = img.getHeight()/2
// 半径(大)
def rad1 = 90
// 半径(小)
def rad2 = 80

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

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

  dr1 += 360/par
  dr2 += 360/par
}
gr.fill(path)
// 切り取り 
gr.setComposite(AlphaComposite.SrcIn)
gr.drawImage(img,0,0,null)
gr.dispose()

ImageIO.write(img2, "png", new File("badge.png"))
元画像
出力画像

動作環境
groovy 1.8.6, JDK7 update4

Friday, May 11, 2012

groovyで画像の四隅を三角形に切り取る

groovyで画像の四隅を三角形に切り取るには、以下のコードを実行します。
import java.io.*
import java.awt.*
import java.awt.geom.*
import java.awt.image.*
import javax.imageio.*

// 画像の四隅を三角形に切り取る
def img = ImageIO.read(new File("sf2.jpg"))
def img2 = new BufferedImage(
  img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB
)
def cut = 20.0
def gr = img2.createGraphics()
gr.setColor(new Color(1F, 1F, 1F, 1F))
def path = new Path2D.Double()
path.moveTo(cut, 0.0)
path.lineTo(img.getWidth() - 1 - cut, 0.0)
path.lineTo(img.getWidth() - 1, cut)
path.lineTo(img.getWidth() - 1, img.getHeight() - 1 - cut)
path.lineTo(img.getWidth() - 1 - cut, img.getHeight() - 1)
path.lineTo(cut, img.getHeight() - 1)
path.lineTo(0.0, img.getHeight() - 1 - cut)
path.lineTo(0.0, cut)
gr.fill(path)
// 切り取り 
gr.setComposite(AlphaComposite.SrcIn)
gr.drawImage(img,0,0,null)
gr.dispose()

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

元画像
出力画像

動作環境
groovy 1.8.6, JDK7 update4

Thursday, May 10, 2012

groovyで画像を丸で切り取る

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

// 画像を丸で切り取る 
def img = ImageIO.read(new File("sf2.jpg"))
// 丸の画像を作成 
def img2 = new BufferedImage(
  img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB
)
def radius = 100.0
def gr = img2.createGraphics()
gr.setColor(new Color(1F, 1F, 1F, 1F))
def rr = new Ellipse2D.Double(
    img.getWidth()/2-radius, img.getHeight()/2-radius, radius*2, radius*2)
gr.fill(rr)
// 切り取り 
gr.setComposite(AlphaComposite.SrcIn)
gr.drawImage(img,0,0,null)
gr.dispose()

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

元画像
出力画像

動作環境
groovy 1.8.6, JDK7 update4

Wednesday, May 09, 2012

groovyで画像に半透明のグラデーションをかける

groovyで画像に半透明のグラデーションをかけるには、以下のコードを実行します。
import java.io.*
import java.awt.*
import java.awt.geom.*
import java.awt.image.*
import javax.imageio.*

// 画像に半透明のグラデーションをかける
def img = ImageIO.read(new File("sf2.jpg"))
def wr = img.getRaster()
def img2 = new BufferedImage(
  img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB
)
def wr2 = img2.getRaster()

def buf = new int[wr.getNumDataElements()]
def buf2 = new int[4]

def alpha1 = 255
def alpha2 = 0
def dalpha = (alpha1 - alpha2)/wr.getHeight()

for(int ly=0;ly<wr.getHeight();ly++){
  for(int lx=0;lx<wr.getWidth();lx++){
    wr.getPixel(lx, ly, buf)
    buf2[0] = buf[0]
    buf2[1] = buf[1]
    buf2[2] = buf[2]
    buf2[3] = (int)(alpha1 - dalpha * ly)
    wr2.setPixel(lx, ly, buf2)
  }
}
ImageIO.write(img2, "png", new File("gradientalpha.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 = ImageIO.read(new File("sf2.jpg"))

def mbf = new MotionBlurFilter()
mbf.setAngle((float)0f/180f*ImageMath.PI)
mbf.setDistance(1f)
mbf.setRotation(0.0f)
mbf.setZoom(0.1f)
img = mbf.filter(img, null)

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

元画像
出力画像

動作環境
groovy 1.8.6, JDK7 update4

Tuesday, May 08, 2012

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 = ImageIO.read(new File("sf2.jpg"))
def imga = new BufferedImage(
  img.getWidth(), img.getHeight(), 
  BufferedImage.TYPE_INT_ARGB
)
def pf = new PinchFilter()
// x座標を50%に設定
pf.setCentreX(0.5f)
// y座標を50%に設定
pf.setCentreY(0.5f)
// 半径を設定
pf.setRadius(150f)
pf.filter(img, imga)

ImageIO.write(imga, "png", new File("pinch.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 = ImageIO.read(new File("sf2.jpg"))

def rnf = new ReduceNoiseFilter()
img = rnf.filter(img, null)

ImageIO.write(img, "png", new File("reducenoise.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 = ImageIO.read(new File("sf2.jpg"))
def wr = img.getRaster()
def img2 = new BufferedImage(
  img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB
)
def wr2 = img2.getRaster()

def buf = new int[wr.getNumDataElements()]
def buf2 = new int[4]

def fwidth = 20

for(int ly=0;ly<wr.getHeight();ly++){
  for(int lx=0;lx<wr.getWidth();lx++){
    wr.getPixel(lx, ly, buf)
    buf2[0] = buf[0]
    buf2[1] = buf[1]
    buf2[2] = buf[2]
    buf2[3] = (lx < fwidth || wr.getWidth() - fwidth <= lx || 
      ly < fwidth || wr.getHeight() - fwidth <= ly)?127:255
    wr2.setPixel(lx, ly, buf2)
  }
}
ImageIO.write(img2, "png", new File("semitransparentframe.png"))

元画像
出力画像

動作環境
groovy 1.8.6, JDK7 update4

Monday, May 07, 2012

groovyでモノトーン画像に変換する

groovyでモノトーン画像に変換するには、以下のコードを実行します。
import java.io.*
import java.awt.*
import java.awt.geom.*
import java.awt.image.*
import javax.imageio.*

// モノトーン画像に変換する
def img = ImageIO.read(new File("sf2.jpg"))
def wr = img.getRaster()

buf = new int[wr.getNumDataElements()]

def color1 = 0xccddff
def red = (color1 >> 16) & 0xff
def green = (color1 >> 8) & 0xff
def blue = color1 & 0xff

for(int ly=1;ly<wr.getHeight();ly++){
  for(int lx=0;lx<wr.getWidth();lx++){
    wr.getPixel(lx, ly, buf)
    def mono = (buf[0] * 77 + buf[1] * 151 + buf[2] * 28) >> 8;
    buf[0] = (int)(mono * red / 255)
    buf[1] = (int)(mono * green / 255)
    buf[2] = (int)(mono * blue / 255)
    wr.setPixel(lx, ly, buf)
  }
}
ImageIO.write(img, "png", new File("monotone.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 = ImageIO.read(new File("sf2.jpg"))

def mf = new MedianFilter()
img = mf.filter(img, null)

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

元画像
出力画像

動作環境
groovy 1.8.6, JDK7 update4

Sunday, May 06, 2012

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 = ImageIO.read(new File("sf2.jpg"))
def imga = new BufferedImage(
  img.getWidth(), img.getHeight(), 
  BufferedImage.TYPE_INT_ARGB
)

def df = new DissolveFilter()
df.setDensity(0.6f)
df.filter(img, imga)

ImageIO.write(imga, "png", new File("dissolve.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 = ImageIO.read(new File("sf2.jpg"))

MarbleFilter mf = new MarbleFilter()
// Xスケールの設定
mf.setXScale(8f)
// Yスケールの設定
mf.setYScale(8f)
// マーブルフィルタをかける量
mf.setAmount(1.0f)
// 荒れ具合を指定
mf.setTurbulence(0.7f)

img = mf.filter(img, null)

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

元画像
出力画像

動作環境
groovy 1.8.6, JDK7 update4