Saturday, May 19, 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 = new BufferedImage(
    200, 200, BufferedImage.TYPE_INT_RGB
)
def pf = new PlasmaFilter()
// 乱れを設定する(0-10)
pf.setTurbulence(1.1f)
// seed設定
pf.setSeed((int)(Math.random()*1000))

img = pf.filter(img, null)

ImageIO.write(img, "png", new File("plasma.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 sbf = new SmartBlurFilter()
sbf.setRadius(5)
sbf.setThreshold(10)
img = sbf.filter(img, null)

ImageIO.write(img, "png", new File("smartblur.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.2f)
mbf.setZoom(0.0f)
img = mbf.filter(img, null)

ImageIO.write(img, "png", new File("motionblur3.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)10f/180f*ImageMath.PI)
mbf.setDistance(20f)
mbf.setRotation(0.0f)
mbf.setZoom(0.0f)
img = mbf.filter(img, null)

ImageIO.write(img, "png", new File("motionblur2.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 qf = new QuantizeFilter()
// 色数
qf.setNumColors(16)
// ディザ使用 
qf.setDither(false)
// サーペンタインパターンを使用するか
qf.setSerpentine(false)
img = qf.filter(img, null)

def lc = new LinearColormap((int)0xFF7799DD, (int)0xFFFFFF30)
LookupFilter lf = new LookupFilter(lc)
img = lf.filter(img, null)


ImageIO.write(img, "png", new File("quantizetwotone.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 lc = new LinearColormap((int)0xFFFFFF10, (int)0xFF3070A0)
LookupFilter lf = new LookupFilter(lc)
img = lf.filter(img, null)

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

元画像
出力画像

動作環境
groovy 1.8.6, JDK7 update4

Friday, May 18, 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()
// レンダリングヒントを設定
def rh = new
  RenderingHints(RenderingHints.KEY_ANTIALIASING,
  RenderingHints.VALUE_ANTIALIAS_ON)

rh.put(RenderingHints.KEY_RENDERING,
  RenderingHints.VALUE_RENDER_QUALITY)

gr.setRenderingHints(rh)

def boxsize = 18
def rsize = 2
def padding = 2
def interval = boxsize + padding

gr.setColor(new Color(1F, 1F, 1F, 1F))

for(int ly=0;ly<img.getHeight();ly+=interval){
  for(int lx=0;lx<img.getWidth();lx+=interval){
    def rr = new RoundRectangle2D.Double(
      lx, ly, boxsize, boxsize, rsize*2, rsize*2)
    gr.fill(rr)
  }
}

// 切り取り 
gr.setComposite(AlphaComposite.SrcIn)
gr.drawImage(img,0,0,null)
gr.dispose()

ImageIO.write(img2, "png", new File("tile.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 img2 = new BufferedImage(
  img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB
)
def gr = img2.createGraphics()
// レンダリングヒントを設定
def rh = new
  RenderingHints(RenderingHints.KEY_ANTIALIASING,
  RenderingHints.VALUE_ANTIALIAS_ON)

rh.put(RenderingHints.KEY_RENDERING,
  RenderingHints.VALUE_RENDER_QUALITY)

gr.setRenderingHints(rh)

def radius = 9
def padding = 2
def interval = radius*2 + padding

gr.setColor(new Color(1F, 1F, 1F, 1F))

def rc = 0
for(int ly=0;ly<img.getHeight();ly+=interval){
  for(int lx=0;lx<img.getWidth()+radius;lx+=interval){
    def rr = new Ellipse2D.Double(
      lx-((rc%2==0)?0:interval/2), ly, radius*2, radius*2)
    gr.fill(rr)
  }
  rc++;
}

// 切り取り 
gr.setComposite(AlphaComposite.SrcIn)
gr.drawImage(img,0,0,null)
gr.dispose()

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

元画像
出力画像

動作環境
groovy 1.8.6, JDK7 update4

Thursday, May 17, 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 = 6
// 中心x
def cx = img.getWidth()/2
// 中心y
def cy = img.getHeight()/2
// 半径
def rad = 100

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

while(dr1<360){
  path.lineTo(
    (int)(cx-Math.cos(2*Math.PI*dr1/360)*rad),
    (int)(cy-Math.sin(2*Math.PI*dr1/360)*rad)
  )
  dr1 += 360/par
}
gr.fill(path)
// 切り取り 
gr.setComposite(AlphaComposite.SrcIn)
gr.drawImage(img,0,0,null)
gr.dispose()

ImageIO.write(img2, "png", new File("hexagon.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 MaximumFilter()
img = wf.filter(img, null)

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

元画像
出力画像

動作環境
groovy 1.8.6, JDK7 update4

Wednesday, May 16, 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 ac = new ArrayColormap()
ac.setColorRange(0, 50, Color.BLACK.getRGB(), Color.BLUE.getRGB())
ac.setColorRange(51, 101, Color.BLUE.getRGB(), Color.GREEN.getRGB())
ac.setColorRange(102, 152, Color.GREEN.getRGB(), Color.YELLOW.getRGB())
ac.setColorRange(153, 204, Color.YELLOW.getRGB(), Color.RED.getRGB())
ac.setColorRange(205, 255, Color.RED.getRGB(), Color.WHITE.getRGB())
LookupFilter lf = new LookupFilter(ac)
img = lf.filter(img, null)

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

元画像
出力画像

動作環境
groovy 1.8.6, JDK7 update4

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()
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 = 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] = (ly<interval/2 && 
      ( ((lx%interval < interval/2) && ly<(lx%interval))  ||
        ((lx%interval >= interval/2) && (ly<(interval-lx%interval))) 
      ))?0:255

    wr2.setPixel(lx, ly, buf2)
  }
}
ImageIO.write(img2, "png", new File("sawtop.png"))


元画像
出力画像

動作環境
groovy 1.8.6, JDK7 update4

groovyで画像を暗視カメラ風に変換する

groovyで画像を暗視カメラ風に変換するには、以下のコードを実行します。
@Grab(group='com.jhlabs', module='filters', version='2.0.235')
import java.io.*
import java.awt.*
import java.awt.geom.*
import java.awt.image.*
import javax.imageio.*
import com.jhlabs.composite.*
import com.jhlabs.image.*

// 画像を暗視カメラ風に変換する
def img = ImageIO.read(new File("sf2.jpg"))

// 明るさを80%、コントラストを150% 
def ctf = new ContrastFilter()
ctf.setBrightness(0.8f)
ctf.setContrast(1.5f)
img = ctf.filter(img, null)

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

def gf = new GaussianFilter()
gf.setRadius(3f)
img = gf.filter(img, null)

def grf = new GrayscaleFilter()
img = grf.filter(img, null)

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[0] = 0
    buf[1] = (ly%2==0)?buf[1]:(int)(buf[1]/2)
    buf[2] = 0
    wr.setPixel(lx, ly, buf)
  }
}
ImageIO.write(img, "png", new File("nightvision.png"))

元画像
出力画像

動作環境
groovy 1.8.6, JDK7 update4