groovy质量更好的图像调整大小

时间:2013-11-25 13:45:03

标签: image image-processing groovy image-resizing

我正在使用java.awt.Graphics2D处理grails项目并调整一些图像大小。 我正在调整尺寸以获得5种尺寸。最小尺寸有宽度:77和高度:58。 问题是,对于这个尺寸,调整大小的图片的质量非常糟糕。 我知道ImageMagic但是我无法改变它,我坚持使用一些java库。 这是我的代码:

 def img = sourceImage.getScaledInstance(77, 58, Image.SCALE_SMOOTH)
 BufferedImage bimage = new BufferedImage(77, 58, BufferedImage.TYPE_INT_RGB)
 Graphics2D bGr = bimage.createGraphics()
 bGr.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY )
 bGr.drawImage(img, 0, 0, null)
 bGr.dispose()

我尝试了不同的提示,但没有改变质量。 我们有一个iOS应用程序,我们真的需要有清晰的图片。 有没有人知道如何提高图像质量?

1 个答案:

答案 0 :(得分:2)

所以,munging the code half way down that link进入Groovy,我们得到:

import java.awt.image.*
import java.awt.*
import static java.awt.RenderingHints.*
import javax.imageio.*

BufferedImage getScaledInstance( image, int nw, int nh, hint ) {
    int type = ( image.getTransparency() == Transparency.OPAQUE ) ? BufferedImage.TYPE_INT_RGB : BufferedImage.TYPE_INT_ARGB
    int w = image.width
    int h = image.height

    while( true ) {
        if( w > nw ) {
            w /= 2
            if( w < nw ) {
                w = nw
            }
        }
        if( h > nh ) {
            h /= 2
            if( h < nh ) {
                h = nh
            }
        }
        image = new BufferedImage( w, h, type ).with { ni ->
            ni.createGraphics().with { g ->
                g.setRenderingHint( KEY_INTERPOLATION, hint )
                g.drawImage( image, 0, 0, w, h, null )
                g.dispose()
                ni
            }
        }
        if( w == nw || h == nh ) {
            return image
        }
    }
}

def img = ImageIO.read( 'https://raw.github.com/grails/grails-core/master/media/logos/grails-logo-highres.jpg'.toURL() )
int newWidth = img.width / 20
int newHeight = img.height / 20
BufferedImage newImage = getScaledInstance( img, newWidth, newHeight, VALUE_INTERPOLATION_BILINEAR )

使用Java / Groovy可以获得最佳效果