Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建调整大小的图像和视频缩略图_Java - Fatal编程技术网

Java 创建调整大小的图像和视频缩略图

Java 创建调整大小的图像和视频缩略图,java,Java,我正在努力使自己的生活更舒适 -任何类型图像的缩略图。(拇指插入.jpg) -最中间帧的视频缩略图 我已经看到了一些其他的问题和谷歌,但不能使任何一个工作良好 e、 g 使用了此代码,但无法创建高质量的缩略图 package main; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; public cla

我正在努力使自己的生活更舒适 -任何类型图像的缩略图。(拇指插入.jpg) -最中间帧的视频缩略图

我已经看到了一些其他的问题和谷歌,但不能使任何一个工作良好

e、 g

使用了此代码,但无法创建高质量的缩略图

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

您可能需要使用插值——请参见
java.awt.RenderingHints
Graphics2D.setRenderingHint()
。这将有助于渲染质量更好的缩略图

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);
            }
使用Java生成缩略图存在一些问题——大型图形可能会消耗大量内存,一些不寻常的图像可能无法读取,并且支持的格式有限


对于更广泛的图像兼容性和格式支持,调用外部程序(如image Magick)可以提供更好的可移植性。请参见
Runtime.exec()

我想向您推荐Image Magick,因为它可以产生良好的输出。

迭代缩放,每次将分辨率减半,直到接近目标分辨率,然后一次性完成剩余部分。

我说的插值!使用
RenderingHints。按一下INTERPOLATION
键并将其设置为
VALUE\u INTERPOLATION\u BICUBIC
,您已经设置了所有其他可能的提示,但不是实际需要的提示。我认为您对
drawImage()
的调用应该使用thumb和image width&height,而不是width-1和height-1。几何边界通常是低包容、高排斥的,因此它们的差异与它们测量的像素数相同。谢谢,非常好,尽管有渲染提示。关键点_插值并将其设置为值_插值_双三次生成与以前相同的结果(或者没有明显的变化,我觉得拇指很小,100*100,但效果还是不错)