2012-04-27 34 views

Trả lời

10

Hoặc, nếu bạn không muốn tải phụ thuộc bên ngoài, chỉ cần thực hiện bình thường bên ngoài:

import static java.awt.RenderingHints.* 
import java.awt.image.BufferedImage 
import javax.imageio.ImageIO 

def img = ImageIO.read(new File('/tmp/image.png')) 

def scale = 0.5 

int newWidth = img.width * scale 
int newHeight = img.height * scale 

new BufferedImage(newWidth, newHeight, img.type).with { i -> 
    createGraphics().with { 
    setRenderingHint(KEY_INTERPOLATION, VALUE_INTERPOLATION_BICUBIC) 
    drawImage(img, 0, 0, newWidth, newHeight, null) 
    dispose() 
    } 
    ImageIO.write(i, 'png', new File('/tmp/scaled.png')) 
} 
5

Thư viện imgscalr có API đơn giản để bật tính năng này.

  • Tải về jar imgscalr-lib (currently version 4.2)
  • Sau đó bạn có thể thay đổi kích thước một hình ảnh trong một cuộc gọi, ví dụ như Scalr.resize(imageIn, 1800)
  • Theo mặc định, tỉ lệ được giữ giống nhau, đối số thứ 2 là widght tối đa (hoặc chiều cao) của hình ảnh mới

Dưới đây là một ví dụ làm việc toàn ...

import org.imgscalr.Scalr 
import java.awt.image.BufferedImage 
import javax.imageio.ImageIO 

def imageFile = new File("C:\\resize-image\\fullsize.jpg") 
def imageIn = ImageIO.read(imageFile); 
def newFile = new File("C:\\resize-image\\resized.jpg") 

BufferedImage scaledImage = Scalr.resize(imageIn, 1800); 
ImageIO.write(scaledImage, "jpg", newFile); 

println "Before: Width:"+imageIn.getWidth()+" Height:"+imageIn.getHeight()+" Size: "+ imageFile.size() 
println "After: Width:"+scaledImage.getWidth()+" Height:"+scaledImage.getHeight() +" Size: "+ newFile.size() 

Hoặc thêm lib imgscalr đến đường dẫn lớp của bạn hoặc gọi groovy với -cp ...

groovy -cp imgscalr-lib-4.2.jar thay đổi kích thước-image.groovy

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