2011-04-20 32 views
1

我使用imgscalr-lib-3.1創建縮略圖,以便在我的環球免稅店 - 經典相冊中使用縮略圖。 它減小了尺寸(像素我的意思是100 * 100),但不是千字節,(如10K,20K)。 這裏是我的代碼:圖像調整大小不會減少千兆字節的圖像 - 使用imgscalr-lib-3.1

public static void createThumbNails(String path) throws ImageFormatException, IOException{ 

    File image ; 
    FileInputStream in = null ; 
    JPEGImageDecoder decoder; 
    BufferedImage bufferedImage ; 
    BufferedImage outBufferedImage ; 
    Scalr scalr = new Scalr(); 
    File folder = new File(path+"/images/album/award/"); 
    File[] files = folder.listFiles(); 
    File outputfile ; 



    for(File file : files){ 
     image = file; 
     in = new FileInputStream(file); 
     decoder = JPEGCodec.createJPEGDecoder(in); 
     bufferedImage = decoder.decodeAsBufferedImage(); 
     outBufferedImage = scalr.resize(bufferedImage, Scalr.Method.SPEED,100); 


     ImageIO.write(outBufferedImage, "jpg", file); 
    } 

    in.close(); 

} 

你們知道該怎麼辦? 謝謝。

+0

只是一個快速提示戴夫,imgscalr使用所有靜態方法,所以無需實例化它的一個實例 - 我應該已經構造私人的。對於困惑感到抱歉。只需調用Scalr.resize(...)即可使用。 – 2011-08-02 21:44:53

回答

3

您將縮略圖寫入您讀取原始圖像的相同文件。這可能不是你想要的。

如果您需要這樣做,但是您需要在讀取輸入文件後刪除或截斷輸入文件,以確保您不會用縮略圖覆蓋前幾個字節,而讓其餘部分包含舊圖像數據。

一個簡單的方法,以截斷文件使用RandomAccessFile

RandomAccessFile raf = new RandomAccessFile(file, "rw"); 
raf.setLength(0); 
raf.close(); 
+0

ImageIO.write(RenderedImage,String,File)將取代任何現有的文件,所以這顯然不是問題。 – jarnbjo 2011-04-20 10:55:57

+0

@jarnbjo:joachim是對的!我改變了目的地文件夾,這就解決了問題,解決了問題:D;) – MoienGK 2011-04-20 11:00:27