@Grab(group='com.jhlabs', module='filters', version='2.0.235') import java.awt.* import java.awt.geom.* 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 bwidth = 10 def ewidth = 1 def wavelength = 3 def margin = 10 // 枠を描画 def img2 = new BufferedImage( img.getWidth()+(bwidth+ewidth)*2, img.getHeight()+(bwidth+ewidth)*2, BufferedImage.TYPE_INT_ARGB ) def gr = img2.createGraphics() gr.setColor(new Color((int)0xff808080)) def edge = new Rectangle2D.Double( 0.0, 0.0, img2.getWidth(), img2.getHeight()) gr.fill(edge) gr.setColor(new Color((int)0xfffffff0)) def rect = new Rectangle2D.Double( ewidth, ewidth, img2.getWidth()-ewidth*2, img2.getHeight()-ewidth*2) gr.fill(rect) gr.drawImage(img, ewidth+bwidth, ewidth+bwidth, null) gr.dispose() // たわませる def rf = new RippleFilter() rf.setXAmplitude((float)wavelength) rf.setXWavelength((float)img2.getHeight()/3) img2 = rf.filter(img2, null) // 余白削除 img = new BufferedImage( img2.getWidth()-wavelength, img2.getHeight(), BufferedImage.TYPE_INT_ARGB ) gr = img.createGraphics() gr.drawImage(img2, 0, 0, null) gr.dispose() // 回転 def rof = new RotateFilter((float)10f/180f*ImageMath.PI, true) img = rof.filter(img, null) // マージン追加 img2 = new BufferedImage( img.getWidth()+margin*2, img.getHeight()+margin*2, BufferedImage.TYPE_INT_ARGB ) gr = img2.createGraphics() gr.drawImage(img, margin, margin, null) gr.dispose() // 影付け def sf = new ShadowFilter() // 半径 sf.setRadius(7f) // 透明度 sf.setOpacity(0.9f) // 角度 sf.setAngle((float)300f/180f*ImageMath.PI) // 距離 sf.setDistance(5f) // 影の色 sf.setShadowColor((int)0xff202020) // 影のマージン sf.setAddMargins(false) // 影のみにするか sf.setShadowOnly(false) img2 = sf.filter(img2, null) ImageIO.write(img2, "png", new File("polaroid.png"))
元画像
出力画像
動作環境
groovy 1.8.6, JDK7 update4