class HomeController < ApplicationController include Java BI = java.awt.image.BufferedImage CS = java.awt.color.ColorSpace IO = javax.imageio.ImageIO def seeimage @data = params[:operation] filename = "#{RAILS_ROOT}/public/images/kids.jpg" imagefile = java.io.File.new(filename) bi = IO.read(imagefile) w = bi.getWidth h = bi.getHeight bi2 = BI.new(w, h, BI::TYPE_INT_RGB) big = bi2.getGraphics big.drawImage(bi, 0, 0, nil) bi = bi2 op = nil case @data when "Grayscale" colorSpace = CS.getInstance(CS::CS_GRAY) op = java.awt.image.ColorConvertOp.new(colorSpace, nil) when "Negative" for j in 0..255 lut[j] = 256 - j end jlut = lut.to_java :byte blut = java.awt.image.ByteLookupTable.new(0, jlut) op = java.awt.image.LookupOp.new(blut, nil) when "Brighten" op = java.awt.image.RescaleOp.new(1.4, -25, nil) when "Sharpen" data = [-1, 0, -1, 0, 5, 0, -1, 0, -1] dataFloat = data.to_java :float metal = java.awt.image.Kernel.new(3, 3, dataFloat) op = java.awt.image.ConvolveOp.new(metal) end dest = op.filter(bi, nil) big.drawImage(dest, 0, 0, nil); os = java.io.ByteArrayOutputStream.new IO.write(dest, "jpeg", os) string = String.from_java_bytes(os.toByteArray) send_data string, :type => "image/jpeg", :disposition => "inline", :filename => "newkids.jpg" end def index end end