我正在使用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应用程序,我们真的需要有清晰的图片。 有没有人知道如何提高图像质量?
答案 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可以获得最佳效果