2016-06-09 68 views
0

的質量我有以下方法從一個文件夾應對JPG照片到另一個:Java的克隆JPG,而不會丟失圖像

public static void copyImage(String from, String to) { 
    try { 
     File sourceimage = new File(from); 
     BufferedImage image = ImageIO.read(sourceimage); 
     ImageIO.write(image, "jpg", new File(to)); 
    } catch (IOException ex) { 
     Logger.getLogger(ImgLib.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (NullPointerException ex){ 
     Logger.getLogger(ImgLib.class.getName()).log(Level.SEVERE, null, ex); 
    }  
} 

它的工作原理,但有點失去照片的質量。

如何在不失去質量的情況下實現「完美」克隆?

+0

爲什麼你讀/寫爲**圖片**?爲什麼不直接複製文件? http://stackoverflow.com/questions/106770/standard-concise-way-to-copy-a-file-in-java/106807#106807 –

+0

@AndreasFester,謝謝,我試過了,它的工作原理 – mondayguy

回答

1

是的,你說得對。在這條線:

ImageIO.write(image, "jpg", new File(to)); 

你的方法仍是重新編碼的圖像數據,其與像JPEG有損格式,勢必造成的保真度圖像中的損失。

我想,您可以嘗試使用此代碼複製影像文件:

InputStream is = null; 
    OutputStream os = null; 
    try { 
     is = new FileInputStream(new File("path/to/img/src")); 
     os = new FileOutputStream(new File("path/to/img/dest")); 
     byte[] buffer = new byte[8192]; 
     int length; 
     while ((length = is.read(buffer)) > 0) { 
      os.write(buffer, 0, length); 
     } 
    } finally { 
     is.close(); 
     os.close(); 
    } 

此外,您可能阿帕奇百科全書IOUtils從一個流簡化複製到另一個或如果u使用的是Java 8則您可以撥打Files.copy方法。

0

您已經使用了將文件讀入圖像對象的BufferedImage。 而應該像使用二進制文件一樣來讀寫圖像文件(使用InputStraem和OutputStream)。

1
 InputStream is = null; 
     OutputStream os = null; 
     try { 
      is = new FileInputStream(new File("path/to/img/src")); 
      os = new FileOutputStream(new File("path/to/img/dest")); 
      byte[] buffer = new byte[1024]; 
      int length; 
      while ((length = is.read(buffer)) > 0) { 
       os.write(buffer, 0, length); 
      } 
     } finally { 
      is.close(); 
      os.close(); 
     } 
相關問題