Search code examples
javagrailsimage-processingframeworks

Image resize in Grails


I am developing a Web Album using Grails and for image processing, I am using grails-image-tools plugin. I need a functionality to resize the images if the uploaded images size is too big (for eg: more than 600 * 840 ) . In this case I need to resize this image to 600 * 840). What is the most efficient way to do this? Thanks a lot.


Solution

  • import java.awt.Image as AWTImage 
    import java.awt.image.BufferedImage      
    import javax.swing.ImageIcon 
    import javax.imageio.ImageIO as IIO  
    import java.awt.Graphics2D
    
    
    static resize = { bytes, out, maxW, maxH -> 
        AWTImage ai = new ImageIcon(bytes).image 
        int width = ai.getWidth( null ) 
        int height = ai.getHeight( null )
    
        def limits = 300..2000 
        assert limits.contains( width ) && limits.contains( height ) : 'Picture is either too small or too big!'
    
        float aspectRatio = width / height float requiredAspectRatio = maxW / maxH
    
        int dstW = 0 
        int dstH = 0 
        if (requiredAspectRatio < aspectRatio) { 
            dstW = maxW dstH = Math.round( maxW / aspectRatio) 
        } else { 
            dstH = maxH dstW = Math.round(maxH * aspectRatio) 
        }
    
        BufferedImage bi = new BufferedImage(dstW, dstH,   BufferedImage.TYPE_INT_RGB)            
        Graphics2D g2d = bi.createGraphics() g2d.drawImage(ai, 0, 0, dstW, dstH, null, null) 
    
        IIO.write( bi, 'JPEG', out )
    }