Tuesday, May 15, 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()]

for(int ly=1;ly<wr.getHeight();ly++){
  for(int lx=0;lx<wr.getWidth();lx++){
    wr.getPixel(lx, ly, buf)
    buf[1] = 0
    buf[2] = 0
    wr.setPixel(lx, ly, buf)
  }
}
ImageIO.write(img, "png", new File("redchannel.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)

def gf = new EmbossFilter()
// 段差
gf.setBumpHeight(2)
img = gf.filter(img, null)

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

元画像
出力画像

動作環境
groovy 1.8.6, JDK7 update4

Monday, May 14, 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 mf = new MedianFilter()
img = mf.filter(img, null)

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] = Math.min(255, (int)(buf[0] * 1.7f))
    buf[1] = Math.min(255, (int)(buf[1] * 1.7f))
    buf[2] = Math.min(255, (int)(buf[2] * 1.7f))
    wr.setPixel(lx, ly, buf)
  }
}

def sf = new SmearFilter()
sf.setShape(SmearFilter.LINES)
sf.setDensity(0.7f)
sf.setDistance(7)
sf.setScatter(0.8f)
sf.setAngle((float)Math.PI/4)
img = sf.filter(img, null)

ImageIO.write(img, "png", new File("drawing.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 oilf = new OilFilter()
oilf.setRange(1)
oilf.setLevels(2)
img = oilf.filter(img, null)
def df = new DiffuseFilter()
df.setScale(1)
img = df.filter(img, null)

ImageIO.write(img, "png", new File("painting.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 imga = new BufferedImage(
  img.getWidth(), img.getHeight(), 
  BufferedImage.TYPE_INT_ARGB
)

def cf = new ChromeFilter()
cf.setAmount(0.4f)
cf.setExposure(1f)
cf.filter(img, imga)

ImageIO.write(imga, "png", new File("chrome.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 grf = new GrayscaleFilter()
img = grf.filter(img, null)
// エッジ抽出
def ef = new EdgeFilter()
img = ef.filter(img, null)
// 反転
def ivf = new InvertFilter()
img = ivf.filter(img, null)

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

元画像
出力画像

動作環境
groovy 1.8.6, JDK7 update4

Sunday, May 13, 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 gf = new GrayscaleFilter()
img = gf.filter(img, imga)

img2 = new BufferedImage(
  img.getWidth(), img.getHeight(), 
  BufferedImage.TYPE_INT_ARGB
)
def grf = new GradientFilter(
  new Point(0, 0), new Point(0, img.getHeight()),
  (int)0xff3070a0, (int)0xffffff10, 
  false, GradientFilter.LINEAR,
  GradientFilter.INT_SMOOTH)

img2 = grf.filter(img2, null)

CompositeFilter cf = new CompositeFilter(
  MiscComposite.getInstance(MiscComposite.BLEND, 0.5f))

img = cf.filter(img, img2)


ImageIO.write(img, "png", new File("gradientimage.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 img2 = new BufferedImage(
  img.getWidth(), img.getHeight(), 
  BufferedImage.TYPE_INT_ARGB
)
def ff = new FillFilter((int)0xff33ffbb)
img2 = ff.filter(img2, null)

def cf = new CompositeFilter(
  MiscComposite.getInstance(MiscComposite.BLEND, 0.2f))

img = cf.filter(img2, img)
ImageIO.write(img, "png", new File("tint.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 grf = new GrayscaleFilter()
img = grf.filter(img, null)
// ノイズフィルタ
def nf = new NoiseFilter()
nf.setMonochrome(true)
img = nf.filter(img, null)

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

元画像
出力画像

動作環境
groovy 1.8.6, JDK7 update4

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