2008-12-12 38 views
12

Tôi đang phát triển một Album Web bằng Grails và để xử lý hình ảnh, tôi đang sử dụng plugin grails-image-tools. Tôi cần một chức năng để thay đổi kích thước hình ảnh nếu kích thước hình ảnh tải lên quá lớn (ví dụ: hơn 600 * 840). Trong trường hợp này, tôi cần phải thay đổi kích thước hình ảnh này thành 600 * 840). Cách hiệu quả nhất để làm điều này là gì? Cảm ơn rất nhiều.Thay đổi kích thước hình ảnh trong Grails

Trả lời

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

này xoay hình ảnh mặc dù .... câu hỏi – hvgotcodes

+0

@hvgotcodes cũ, nhưng lý do xảy ra là vì hình ảnh không thực sự được quay ở vị trí đầu tiên - nó chỉ có dữ liệu EXIF ​​chỉ thị cho người xem ảnh (như trình duyệt) hiển thị hình ảnh được xoay. Một số máy ảnh (và đặc biệt là điện thoại) làm điều này thay vì thực sự xoay hình ảnh. Vì hình ảnh không thực sự được xoay và các API Java không xem dữ liệu xoay EXIF, hình ảnh kết thúc xuất hiện để được xoay, mặc dù trong thực tế nó không phải. Dưới đây là [ví dụ] (https://gist.github.com/9re/1990019) mã kiểm tra dữ liệu EXIF ​​và xoay theo đó. –

1

Sử dụng plugin ImageTool. http://grails.org/ImageTools+plugin

+0

Bất kỳ ý tưởng nào nếu nó tương thích với Grails 2? Có cần thiết phải xây dựng bản thân mình từ git hay bản phát hành mới nhất 0.1 cũng hoạt động không? –

12

Trong BuildConfig.groovy thêm một phụ thuộc vào imgscalr

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

hình ảnh Sau đó, thay đổi kích thước trở thành một lớp lót:

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

Don sẽ duy trì chất lượng của hình ảnh. Vì tôi đang sử dụng plugin grails imageTools nhưng chất lượng hình ảnh nó tạo ra rất kém – Wasim

+0

@Charsee Tôi rất hài lòng với chất lượng hình ảnh –

+0

Oh Great !!! Thanx Don :) – Wasim

Các vấn đề liên quan