2013-10-31 52 views
0

我想要的大小的縮略圖,使居住 - 任何類型的圖像的縮略圖。 (拇指在.jpg雖然) - 其中最中間幀的視頻縮略圖。創建的圖像和視頻

我已經看到了一些其他問題計算器和google搜索,但不能做任何一個工作良好。

例如

使用此代碼,但它不會創建一個好質量的縮略圖。

package main; 

import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import java.io.File; 


import javax.imageio.ImageIO; 


public class Main implements Serializable { 


    public static void main(String[] args) throws FileNotFoundException, IOException { 




       Main fac = new Main(); 
       fac.run("C:\\Users\\Masood-Ahmad\\Desktop\\tempSnaps"); 
    }   

      public void run(String folder) { 
      File dir = new File(folder); 
      for (File file : dir.listFiles()) { 
       createThumbnail(file); 
      } 

     } 

     private void createThumbnail(File file) { 



       try { 
        // BufferedImage is the best (Toolkit images are less flexible) 
        BufferedImage img = ImageIO.read(file); 
        BufferedImage thumb = createEmptyThumbnail(); 

        // BufferedImage has a Graphics2D 
        Graphics2D g2d = (Graphics2D) thumb.getGraphics(); 
        //**Edit-------------** 
        g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); 
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
        g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); 
        g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); 
        g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE); 
        g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); 
        g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE); 
        g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE); 
        //**Edit end----------------** 
        g2d.drawImage(img, 0, 0, 
            thumb.getWidth() - 1, 
            thumb.getHeight() - 1, 
            0, 0, 
            img.getWidth() - 1, 
            img.getHeight() - 1, 
            null); 
        g2d.dispose(); 
        ImageIO.write(thumb, "JPG", createOutputFile(file)); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 

      private File createOutputFile(File inputFile) { 
       // You'll want something better than this... 
       return new File(inputFile.getAbsolutePath() 
           + ".thumb.png"); 
      } 

      private BufferedImage createEmptyThumbnail() { 
       return new BufferedImage(200, 200, 
             BufferedImage.TYPE_INT_RGB); 
      } 

回答

0

你可能想使用插值 - 見java.awt.RenderingHintsGraphics2D.setRenderingHint()。這應該有助於渲染質量更好的縮略圖。

有一些問題與使用Java生成縮略圖 - 大型圖形可能會佔用大量的內存,一些不尋常的圖像可能無法讀取,支持的格式是有限的。

對於較寬的圖像兼容性&格式的支持,呼叫到一個外部程序如難懂的能夠提供更好的便攜性。請參閱Runtime.exec()來執行此操作。

+0

看到編輯。沒用 –

+0

我說插值!使用'RenderingHints.KEY_INTERPOLATION'並將其設置爲'VALUE_INTERPOLATION_BICUBIC',你已經得到了所有其他可能的提示設置,但不是實際的一個需要。 –

+0

我認爲你對'drawImage()'的調用應該使用拇指和圖像寬度和高度,而不是寬度-1和高度-1。幾何邊界通常是較低的包容性的,高級獨佔的,以便它們的差異與它們測量的像素的數目相同。 –

0

我想推薦你難懂的,因爲它可以產生良好的輸出。

0

反覆調整縮放每個減半分辨率,直到你達到接近你targetresolution,然後做休息一去