Saturday, May 05, 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 bf = new BumpFilter()
img = bf.filter(img, null)

ImageIO.write(img, "png", new File("bump.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.setColor(new Color(0xccddff))
def rect = new Rectangle2D.Double(
    0.0, 0.0, img2.getWidth()-1, img2.getHeight()-1)
gr.fill(rect)
gr.drawImage(img, bwidth, bwidth, null)
gr.dispose()

ImageIO.write(img2, "png", new File("border.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 gf = new GlowFilter()
gf.setAmount(0.3f)
img = gf.filter(img, null)

ImageIO.write(img, "png", new File("glow.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 pf = new PosterizeFilter()
pf.setNumLevels(4)
img = pf.filter(img, null)

ImageIO.write(img, "png", new File("posterize.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 interval = 4

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+ly)%interval==0)?0:255
    wr2.setPixel(lx, ly, buf2)
  }
}
ImageIO.write(img2, "png", new File("diagonal.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 pf = new PointillizeFilter()
// スケール
pf.setScale(5)
// エッジを表示するかどうか
pf.setFadeEdges(true)
// エッジの厚さ
pf.setEdgeThickness(0.4f)
// ランダムさ
pf.setRandomness(0.3f)
// あいまいさ
pf.setFuzziness(0.4f)
img = pf.filter(img, null)

ImageIO.write(img, "png", new File("pointillize.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 gridsize = 8
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%gridsize==0 || ly%gridsize==0)?0:255
    wr2.setPixel(lx, ly, buf2)
  }
}
ImageIO.write(img2, "png", new File("grid.png"))

元画像
出力画像

動作環境
groovy 1.8.6, JDK7 update4

Friday, May 04, 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 wf = new WeaveFilter()
img = wf.filter(img, imga)

ImageIO.write(imga, "png", new File("weave.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 nf = new NoiseFilter()
nf.setMonochrome(true)
img = nf.filter(img, null)

ImageIO.write(img, "png", new File("noise.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 buf = new int[wr.getNumDataElements()]

def bwidth = 20
for(int ly=0;ly<bwidth;ly++){
  for(int lx=0;lx<wr.getWidth();lx++){
    wr.getPixel(lx, ly, buf)
    buf[0] = buf[0]/2
    buf[1] = buf[1]/2
    buf[2] = buf[2]/2
    wr.setPixel(lx, ly, buf)
  }
}
for(int ly=wr.getHeight()-bwidth;ly<wr.getHeight();ly++){
  for(int lx=0;lx<wr.getWidth();lx++){
    wr.getPixel(lx, ly, buf)
    buf[0] = buf[0]/2
    buf[1] = buf[1]/2
    buf[2] = buf[2]/2
    wr.setPixel(lx, ly, buf)
  }
}

ImageIO.write(img, "png", new File("blackband.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 cf = new CrystallizeFilter()
// スケールの設定
cf.setScale(8)
// エッジを消すかどうか
cf.setFadeEdges(false)
// エッジの幅
cf.setEdgeThickness(0.4f)
// ランダムさ
cf.setRandomness(0.5f)

img = cf.filter(img, null)

ImageIO.write(img, "png", new File("crystallize.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()

buf = new int[wr.getNumDataElements()]

for(int ly=1;ly<wr.getHeight();ly+=2){
  for(int lx=0;lx<wr.getWidth();lx++){
    wr.getPixel(lx, ly, buf)
    buf[0] = buf[0]/2
    buf[1] = buf[1]/2
    buf[2] = buf[2]/2
    wr.setPixel(lx, ly, buf)
  }
}
ImageIO.write(img, "png", new File("video.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 wf = new WaterFilter()
// x座標を60%に設定
wf.setCentreX(0.5f)
// y座標を60%に設定
wf.setCentreY(0.5f)
// 半径を設定
wf.setRadius(100f)
// 輪の太さ
wf.setWavelength(20)
// 振幅
wf.setAmplitude(3)
img = wf.filter(img, null)

ImageIO.write(img, "png", new File("water.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 gf = new EmbossFilter()
// 段差
gf.setBumpHeight(2)
img = gf.filter(img, null)

ImageIO.write(img, "png", new File("emboss.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()

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

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+ly)%2==0)?255:0
    wr2.setPixel(lx, ly, buf2)
  }
}
ImageIO.write(img2, "png", new File("checker.png"))

元画像
出力画像

動作環境
groovy 1.8.6, JDK7 update4