0

常駐させようとしています-あらゆるタイプの画像のサムネイル。(ただし、.jpg のサムネール) - ビデオの最も中央のフレームのサムネイル。

他のいくつかのスタックオーバーフローの質問とグーグルを見ましたが、どれもうまく機能しません。

例えば

このコードを使用しましたが、高品質のサムネイルが作成されません。

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);
            }
4

3 に答える 3

0

ターゲット解像度に近づくまで、解像度を半分にするたびにスケーリングを繰り返し、残りを一度に実行します

于 2013-10-31T10:36:22.733 に答える