2008-12-12 7 views
12

Je développe un album Web en utilisant Grails et pour le traitement d'image, j'utilise grails-image-tools plugin. J'ai besoin d'une fonctionnalité pour redimensionner les images si la taille des images téléchargées est trop grande (par exemple: plus de 600 * 840). Dans ce cas, j'ai besoin de redimensionner cette image à 600 * 840). Quel est le moyen le plus efficace de le faire? Merci beaucoup.Redimensionner l'image dans Grails

Répondre

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) 
} 
+0

ce fait pivoter l'image bien .... – hvgotcodes

+0

@hvgotcodes vieille question, mais la raison en est que l'image n'est pas réellement pivotée en premier lieu - elle a juste des données EXIF ​​qui indiquent aux visionneuses de photos (comme les navigateurs) d'afficher l'image pivotée. Certaines caméras (et en particulier les téléphones) font cela au lieu de faire tourner l'image. Comme l'image n'est pas réellement pivotée et que les API Java ne regardent pas les données de rotation EXIF, l'image finit par tourner, même si en réalité ce n'est pas le cas. Voici [un exemple] (https://gist.github.com/9re/1990019) de code qui vérifie les données EXIF ​​et tourne en conséquence. –

1

Utilisez le plugin ImageTool. http://grails.org/ImageTools+plugin

+0

Une idée si elle est compatible avec Grails 2? Est-il nécessaire de me construire à partir de git ou est-ce que la dernière version 0.1 fonctionne aussi? –

12

Dans BuildConfig.groovy ajouter une dépendance à imgscalr

dependencies { 
    compile 'org.imgscalr:imgscalr-lib:4.1'  
} 

redimensionnement des images devient alors un one-liner:

BufferedImage thumbnail = Scalr.resize(image, 150); 
+0

Don va-t-il maintenir la qualité de l'image. Comme j'utilise grails imageTools plugin mais la qualité de l'image qu'il crée est très pauvre – Wasim

+0

@Charsee Je suis très satisfait de la qualité de l'image –

+0

Oh Great !!! Thanx Don :) – Wasim