Изменение размера изображения в Grails

Я разрабатываю веб-альбом с использованием Grails, а для обработки изображений использую плагин grails-image-tools. Мне нужна функциональность для изменения размера изображений, если размер загружаемых изображений слишком велик (например, более 600 * 840). В этом случае мне нужно изменить размер этого изображения до 600 * 840). Какой самый эффективный способ сделать это? Большое спасибо.

12.12.2008 10:07:58
3 ОТВЕТА
РЕШЕНИЕ
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 )
} 
8
10.03.2010 16:27:02
@hvgotcodes старый вопрос, но причина, по которой это происходит, заключается в том, что изображение на самом деле не поворачивается в первую очередь - оно просто содержит данные EXIF, которые инструктируют зрителей фотографий (например, браузеры) отображать повернутое изображение. Некоторые камеры (и особенно телефоны) делают это вместо фактического поворота изображения. Поскольку изображение на самом деле не поворачивается, а API-интерфейсы Java не смотрят данные поворота EXIF, изображение оказывается повернутым, хотя в действительности это не так. Вот пример кода, который проверяет данные EXIF ​​и вращается соответствующим образом.
Tom Marthenal 25.06.2013 13:54:18

Используйте плагин ImageTool. https://grails.org/plugin/image-tools PS Доступно только для Grails v2.

2
29.05.2019 18:58:46
Есть идеи, если он совместим с Grails 2? Нужно ли собираться из git или последняя версия 0.1 тоже работает?
Wim Deblauwe 17.10.2012 18:12:20

В BuildConfig.groovyдобавьте зависимость к imgscalr

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

Затем изменение размера изображения становится однострочным:

BufferedImage thumbnail = Scalr.resize(image, 150);
14
30.08.2012 20:07:45
Дон будет поддерживать качество изображения. Так как я использую плагин grails imageTools, но качество создаваемого им изображения очень низкое
Wasim 18.10.2012 15:49:23
@Charsee Я очень доволен качеством изображения
Dónal 18.10.2012 17:00:44
Я пытался использовать scalr, но получаю сообщение об ошибке «Нет такого свойства: Scalr для класса ....». Я должен импортировать это? Или я должен буду сделать что-то еще, чтобы заставить это работать
Wasim 19.10.2012 09:56:08
да, вам нужно импортировать класс Scalr. Добавьте следующее к списку импорта в классе, где вы делаете изменение размераimport org.imgscalr.Scalr
Dónal 21.10.2012 17:11:50