Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_Image - Fatal编程技术网

如何在java中制作图像的精确副本?

如何在java中制作图像的精确副本?,java,image,Java,Image,加载图像后,我想创建图像的精确副本,这样图像的质量和比例就可以保持不变。使用我当前的代码,质量降低了 public class Image { private static final String path = "C:/Users.../src/7horses.jpg"; private static final File file = new File(path); static BufferedImage deepCopy(BufferedImage bi) th

加载图像后,我想创建图像的精确副本,这样图像的质量和比例就可以保持不变。使用我当前的代码,质量降低了

public class Image {
    private static final String path = "C:/Users.../src/7horses.jpg";
    private static final File file = new File(path);

    static BufferedImage deepCopy(BufferedImage bi) throws IOException {
        String saveAs = "copy.jpg";
        ColorModel cm = bi.getColorModel();
        boolean isAlphaPremultiplied = cm.isAlphaPremultiplied();
        WritableRaster raster = bi.copyData(null);
        BufferedImage cImg = new BufferedImage(cm, raster, isAlphaPremultiplied, null);
        File saveImage = new File("C:/Users.../src", saveAs);
        ImageIO.write(cImg, "jpg", saveImage);
        return cImg;
    }

    public static void main(String[] args) throws IOException {
        BufferedImage cp, img;
        img = ImageIO.read(file); 
        cp = deepCopy(img);
    }
}

尝试仅复制图像文件,请使用以下代码:

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

如果您使用的是Java 8,那么您可以调用
文件。复制
方法,在

中检查它尝试复制图像文件,使用以下代码:

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

如果您使用的是Java 8,那么您可以调用
文件。复制
方法,在

中检查它尝试复制图像文件,使用以下代码:

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

如果您使用的是Java 8,那么您可以调用
文件。复制
方法,在

中检查它尝试复制图像文件,使用以下代码:

        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();
        }
如果您使用的是Java 8,则只需调用
文件。复制
方法,请在转到使用:

ImageIO.write(cImg, "jpg", saveImage);
以下内容:(这里没有我的开发环境来测试这一点,但我想我已经为您准备好了。)

停止使用:

ImageIO.write(cImg, "jpg", saveImage);
以下内容:(这里没有我的开发环境来测试这一点,但我想我已经为您准备好了。)

停止使用:

ImageIO.write(cImg, "jpg", saveImage);
以下内容:(这里没有我的开发环境来测试这一点,但我想我已经为您准备好了。)

停止使用:

ImageIO.write(cImg, "jpg", saveImage);
以下内容:(这里没有我的开发环境来测试这一点,但我想我已经为您准备好了。)



你知道你在复制有损数据,对吗?如何才能“准确复制”而不损失质量?如果这是您的目标,那么使用无损耗压缩图像数据类型。如果您想要图像的精确副本,为什么不简单复制文件?它与BuffereImage无关,而与JPG有关。@user902383说了什么!要制作图像的精确副本,您需要从一个文件逐字节复制到另一个文件,而无需在复制时对字节进行任何更改或修改。一旦您对一个字节进行了更改,就会引入一些工件,这些工件将导致输入和输出之间的差异。您将遇到的问题是jpeg不是场景的精确逐像素图像。场景的逐像素图像通过压缩算法运行,该算法去除细节。更多的压缩,更少的细节。逐字节复制将复制相同的压缩。您知道您在复制有损数据,对吗?如何才能“准确复制”而不损失质量?如果这是您的目标,那么使用无损耗压缩图像数据类型。如果您想要图像的精确副本,为什么不简单复制文件?它与BuffereImage无关,而与JPG有关。@user902383说了什么!要制作图像的精确副本,您需要从一个文件逐字节复制到另一个文件,而无需在复制时对字节进行任何更改或修改。一旦您对一个字节进行了更改,就会引入一些工件,这些工件将导致输入和输出之间的差异。您将遇到的问题是jpeg不是场景的精确逐像素图像。场景的逐像素图像通过压缩算法运行,该算法去除细节。更多的压缩,更少的细节。逐字节复制将复制相同的压缩。您知道您在复制有损数据,对吗?如何才能“准确复制”而不损失质量?如果这是您的目标,那么使用无损耗压缩图像数据类型。如果您想要图像的精确副本,为什么不简单复制文件?它与BuffereImage无关,而与JPG有关。@user902383说了什么!要制作图像的精确副本,您需要从一个文件逐字节复制到另一个文件,而无需在复制时对字节进行任何更改或修改。一旦您对一个字节进行了更改,就会引入一些工件,这些工件将导致输入和输出之间的差异。您将遇到的问题是jpeg不是场景的精确逐像素图像。场景的逐像素图像通过压缩算法运行,该算法去除细节。更多的压缩,更少的细节。逐字节复制将复制相同的压缩。您知道您在复制有损数据,对吗?如何才能“准确复制”而不损失质量?如果这是您的目标,那么使用无损耗压缩图像数据类型。如果您想要图像的精确副本,为什么不简单复制文件?它与BuffereImage无关,而与JPG有关。@user902383说了什么!要制作图像的精确副本,您需要从一个文件逐字节复制到另一个文件,而无需在复制时对字节进行任何更改或修改。一旦您对一个字节进行了更改,就会引入一些工件,这些工件将导致输入和输出之间的差异。您将遇到的问题是jpeg不是场景的精确逐像素图像。场景的逐像素图像通过压缩算法运行,该算法去除细节。更多的压缩,更少的细节。逐字节复制将复制相同的压缩。这仍然是对图像数据进行重新编码,使用有损格式(如JPEG)将不可避免地导致图像保真度损失。根据我的经验,将CompressionQuality设置为1不会导致质量损失,它保留了原始图像的质量。本质上,你说的是将我的图像保存为JPG,但不要压缩。我不确定它是否会失去原始图像的保真度,肉眼看不出来,但这将使我的文件大小从5米增加到7.7米。这仍然是对图像数据进行重新编码,使用JPEG等有损格式,将不可避免地导致图像失真。根据我的经验,将CompressionQuality设置为1不会导致质量损失,但会保留原始图像的质量。本质上,你说的是把我的图像保存为JPG