Ich entwickle ein Webalbum mit Grails und für die Bildverarbeitung verwende ich das Plugin grails-image-tools. Ich brauche eine Funktion, um die Größe der Bilder zu ändern, wenn die Größe der hochgeladenen Bilder zu groß ist (zB: mehr als 600 * 840). In diesem Fall muss das Bild auf 600 * 840 skaliert werden. Was ist der effizienteste Weg, dies zu tun? Danke vielmals.Bildgröße in Grails
12
A
Antwort
7
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)
}
1
Verwenden Sie das ImageTool-Plugin. http://grails.org/ImageTools+plugin
+0
Irgendeine Idee, wenn es mit Grails 2 kompatibel ist? Ist es notwendig, mich selbst von Git zu bauen oder funktioniert auch die neueste Version 0.1? –
12
In BuildConfig.groovy
fügen Sie eine Abhängigkeit zu imgscalr
dependencies {
compile 'org.imgscalr:imgscalr-lib:4.1'
}
Dann Größe der Bilder wird ein Einzeiler:
BufferedImage thumbnail = Scalr.resize(image, 150);
dies obwohl das Bild dreht .... – hvgotcodes
@hvgotcodes alte Frage, Der Grund dafür ist, dass das Bild nicht wirklich gedreht wird. Es verfügt lediglich über EXIF-Daten, die Fotobetrachter (wie Browser) anweisen, das Bild gedreht anzuzeigen. Einige Kameras (und insbesondere Telefone) tun dies, anstatt das Bild tatsächlich zu drehen. Da das Bild nicht wirklich gedreht wird und die Java-APIs die EXIF-Rotationsdaten nicht betrachten, scheint das Bild gedreht zu werden, obwohl dies in Wirklichkeit nicht der Fall ist. Hier ist [ein Beispiel] (https://gist.github.com/9re/1990019) Code, der die EXIF-Daten überprüft und entsprechend rotiert. –