2015-06-09 91 views
0

我想知道是否可以在不使用任何第三方庫的情況下爲Java中的圖像生成具有適當高寬比的縮略圖。如果沒有,那麼請提供一個快速高效的開源庫來生成具有適當高寬比的縮略圖。在Java中生成縮略圖

如果圖像非常大可以說1900 X 1080,那麼縮略圖不應該是原始圖像的縮放版本裁剪和調整大小,從而獲得清晰的視圖。

注意:縮略圖的大小對於任何尺寸的圖像都是恆定的。

+0

「適當修剪」 的標準是什麼? – Puce

+0

你想存儲縮略圖,顯示它們還是兩者?如果你想顯示它們:你是否已經有UI工具箱? – Puce

+0

「恆定大小」是什麼意思?相同的磁盤大小?相同的總像素數?與給定數量相同的寬度或高度(以較大者爲準)? – tucuxi

回答

0

我喜歡im4javaImage Magick的包裝。

im4java只是爲ImageMagick命令生成命令行並將生成的行傳遞給選定的IM命令(使用java.lang.ProcessBuilder.start()方法),這意味着細化和內存消耗是委託給服務器內的另一個preocess,我喜歡這個。

我正在使用和我在很多項目中使用它,我發現它非常可靠,快速和完整。需要

1

沒有第三方庫(但可能慢於ImageMagick的):

import java.awt.*; 
import java.awt.image.*; 
import javax.imageio.*; 
import java.nio.file.*; 

public class J { 

    public static BufferedImage createThumb(BufferedImage in, int w, int h) { 
     // scale w, h to keep aspect constant 
     double outputAspect = 1.0*w/h; 
     double inputAspect = 1.0*in.getWidth()/in.getHeight(); 
     if (outputAspect < inputAspect) { 
      // width is limiting factor; adjust height to keep aspect 
      h = (int)(w/inputAspect); 
     } else { 
      // height is limiting factor; adjust width to keep aspect 
      w = (int)(h*inputAspect); 
     } 
     BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); 
     Graphics2D g2 = bi.createGraphics(); 
     g2.setRenderingHint(
      RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
     g2.drawImage(in, 0, 0, w, h, null); 
     g2.dispose(); 
     return bi; 
    } 

    public static void main(String args[]) throws Exception { 
     for (String in : args) { 
      BufferedImage bi = createThumb(
       ImageIO.read(Files.newInputStream(Paths.get(in))), 
       128, 128); 
      String ext = in.substring(in.lastIndexOf(".")+1); 
      String out = in.replaceFirst(".([a-z]+)$", "_thumb." + ext); 
      System.err.println(in + " --> " + out); 
      ImageIO.write(bi, ext, Files.newOutputStream(Paths.get(out))); 
     } 
    } 
} 

主要方法預計,作爲參數,路徑將圖像陣列。它將嘗試以與找到原件相同的格式創建縮略圖;您可以通過替換分配extext = "png"(例如)的行來更改此設置。

+0

上述內容會生成固定寬度的縮略圖,但高度會變化以保持寬高比。但要求是生成圖像或圖像區域的縮略圖並保持寬高比。 –

+0

錯了。圖像將被製作爲適合'w'x'h',適當降低其高度*或*寬度以保持縱橫比。這是「恆定大小」的三種可能解釋之一(參見我對OP的評論)。 – tucuxi