2011-04-20 54 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