Skip to content

Instantly share code, notes, and snippets.

@kamiyaowl
Created March 1, 2014 15:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kamiyaowl/9291536 to your computer and use it in GitHub Desktop.
Save kamiyaowl/9291536 to your computer and use it in GitHub Desktop.
scalaでフィルタ処理
import scala.language.implicitConversions
import java.awt.image.{BufferedImage,Kernel,ConvolveOp}
import javax.imageio.ImageIO
import java.io.File
object ImageProc {
implicit class RichString(self:String) {
def getExt() = self drop(self.lastIndexOf(".") + 1)
}
implicit class RichBufferedImage(self:BufferedImage){
def save(path:String):Boolean = ImageIO.write(self,path.getExt,new File(path))
}
implicit class FilterExtensitons(self:Array[Float]) {
def createKernel() = {
val size = math.sqrt(self.length).toInt
new Kernel(size,size,self)
}
def createConvOp() = new ConvolveOp(createKernel,ConvolveOp.EDGE_NO_OP,null)
def filter(src:BufferedImage) = {
val dst = new BufferedImage(src.getWidth,src.getHeight,BufferedImage.TYPE_INT_RGB)
self.createConvOp.filter(src,dst)
}
}
object ImageFilters {
val edge_3 = Array(0.0f, -1.0f, 0.0f,-1.0f, 4.0f, -1.0f, 0.0f, -1.0f, 0.0f)
def blur(size:Int) = {
val length = size * size
Array.fill(length)(1.0f / length)
}
val sharp_3 = Array(-1.0f, -1.0f, -1.0f, -1.0f, 9.0f, -1.0f, -1.0f, -1.0f, -1.0f)
val enbos_3 = Array(-1.0f, 0.0f, 1.0f, -2.0f, 0.0f, 2.0f, -1.0f, 0.0f, 1.0f)
}
def load(file:String):BufferedImage = ImageIO.read(new File(file))
def main(args:Array[String]):Unit = {
val src = load("sample.png")
ImageFilters.edge_3.filter(src).save("edge_3.jpg")
ImageFilters.blur(5).filter(src).save("blur.jpg")
ImageFilters.sharp_3.filter(src).save("sharp_3.jpg")
ImageFilters.enbos_3.filter(src).save("enbos_3.jpg")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment