Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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 调整图像文件大小,保留jpg Exif信息_Java_Parameters_Image Resizing_Exif - Fatal编程技术网

Java 调整图像文件大小,保留jpg Exif信息

Java 调整图像文件大小,保留jpg Exif信息,java,parameters,image-resizing,exif,Java,Parameters,Image Resizing,Exif,我想复制所有Exif图像数据也被复制的图像 我有一个Java应用程序,它将jpg读入图像对象,调整其大小,然后将图像对象写入另一个文件夹中的jpg文件 问题是它丢失了所有漂亮的图像信息(相机、日期等等)。 有什么想法吗?尽管该解决方案是针对Android的,但它是Java的,应该有助于将所有EXIF元数据从一个文件复制到另一个文件: 请注意,Sanselan最近被更名为Commons Imaging,可在此处找到: 尽管该解决方案是为Android设计的,但它采用Java语言,有助于将所有EX

我想复制所有Exif图像数据也被复制的图像

我有一个Java应用程序,它将jpg读入图像对象,调整其大小,然后将图像对象写入另一个文件夹中的jpg文件

问题是它丢失了所有漂亮的图像信息(相机、日期等等)。
有什么想法吗?

尽管该解决方案是针对Android的,但它是Java的,应该有助于将所有EXIF元数据从一个文件复制到另一个文件:

请注意,Sanselan最近被更名为Commons Imaging,可在此处找到:


尽管该解决方案是为Android设计的,但它采用Java语言,有助于将所有EXIF元数据从一个文件复制到另一个文件:

请注意,Sanselan最近被更名为Commons Imaging,可在此处找到:


一个选项是像这样使用图像IO:

try (ImageInputStream inputStream = new FileImageInputStream(new File("Landscape_3.jpg"))) {
        Iterator<ImageReader> readerIterator = ImageIO.getImageReaders(inputStream);
        ImageReader reader = readerIterator.next();
        reader.setInput(inputStream);
        Iterator<IIOImage> imageIterator = reader.readAll(null);
        IIOImage image = imageIterator.next();

        BufferedImage srcImage = (BufferedImage) image.getRenderedImage();
        AffineTransformOp scaleOp = new AffineTransformOp(AffineTransform.getScaleInstance(0.5, 0.5), AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
        BufferedImage resultImage = scaleOp.createCompatibleDestImage(srcImage, null);
        resultImage = scaleOp.filter(srcImage, resultImage);
        image.setRenderedImage(resultImage);

        ImageWriter writer = ImageIO.getImageWriter(reader);
        try (ImageOutputStream outputStream = new FileImageOutputStream(new File("Landscape_3_preserve_exif.jpg"))) {
            writer.setOutput(outputStream);
            writer.write(image);
        }
        try (ImageOutputStream outputStream = new FileImageOutputStream(new File("Landscape_3_discard_exif.jpg"))) {
            writer.setOutput(outputStream);
            writer.write(image.getRenderedImage());
        }
    }
try(ImageInputStream-inputStream=newfileimageinputstream(新文件(“Landscape_3.jpg”)){
迭代器readerIterator=ImageIO.getImageReaders(inputStream);
ImageReader=ReaderInterator.next();
reader.setInput(inputStream);
迭代器imageIterator=reader.readAll(null);
IIOImage image=imageIterator.next();
BuffereImage srcImage=(BuffereImage)image.getRenderImage();
AffineTransformOp scaleOp=新的AffineTransformOp(AffineTransform.getScaleInstance(0.5,0.5),AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
BuffereImage resultImage=scaleOp.createCompatibleDestImage(srcImage,null);
resultImage=scaleOp.filter(srcImage,resultImage);
image.setRenderImage(结果图像);
ImageWriter writer=ImageIO.getImageWriter(读卡器);
try(ImageOutputStream outputStream=新文件ImageOutputStream(新文件(“Landscape\u 3\u preserve\u exif.jpg”)){
writer.setOutput(outputStream);
作家。写作(形象);
}
try(ImageOutputStream outputStream=新文件ImageOutputStream(新文件(“Landscape\u 3\u discard\u exif.jpg”)){
writer.setOutput(outputStream);
write(image.getrenderimage());
}
}
陷阱:

  • 一般来说,它和图像io框架一样慢
  • 对于一些罕见的图像,它莫名其妙地失败了。示例(javax.imageio.IIOException:非JPEG文件:以0xff 0xe2开头)
  • 它要求对源图像和目标图像使用相同的颜色模型。因此,不能使用双线性或双三次插值

一个选项是像这样使用图像IO:

try (ImageInputStream inputStream = new FileImageInputStream(new File("Landscape_3.jpg"))) {
        Iterator<ImageReader> readerIterator = ImageIO.getImageReaders(inputStream);
        ImageReader reader = readerIterator.next();
        reader.setInput(inputStream);
        Iterator<IIOImage> imageIterator = reader.readAll(null);
        IIOImage image = imageIterator.next();

        BufferedImage srcImage = (BufferedImage) image.getRenderedImage();
        AffineTransformOp scaleOp = new AffineTransformOp(AffineTransform.getScaleInstance(0.5, 0.5), AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
        BufferedImage resultImage = scaleOp.createCompatibleDestImage(srcImage, null);
        resultImage = scaleOp.filter(srcImage, resultImage);
        image.setRenderedImage(resultImage);

        ImageWriter writer = ImageIO.getImageWriter(reader);
        try (ImageOutputStream outputStream = new FileImageOutputStream(new File("Landscape_3_preserve_exif.jpg"))) {
            writer.setOutput(outputStream);
            writer.write(image);
        }
        try (ImageOutputStream outputStream = new FileImageOutputStream(new File("Landscape_3_discard_exif.jpg"))) {
            writer.setOutput(outputStream);
            writer.write(image.getRenderedImage());
        }
    }
try(ImageInputStream-inputStream=newfileimageinputstream(新文件(“Landscape_3.jpg”)){
迭代器readerIterator=ImageIO.getImageReaders(inputStream);
ImageReader=ReaderInterator.next();
reader.setInput(inputStream);
迭代器imageIterator=reader.readAll(null);
IIOImage image=imageIterator.next();
BuffereImage srcImage=(BuffereImage)image.getRenderImage();
AffineTransformOp scaleOp=新的AffineTransformOp(AffineTransform.getScaleInstance(0.5,0.5),AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
BuffereImage resultImage=scaleOp.createCompatibleDestImage(srcImage,null);
resultImage=scaleOp.filter(srcImage,resultImage);
image.setRenderImage(结果图像);
ImageWriter writer=ImageIO.getImageWriter(读卡器);
try(ImageOutputStream outputStream=新文件ImageOutputStream(新文件(“Landscape\u 3\u preserve\u exif.jpg”)){
writer.setOutput(outputStream);
作家。写作(形象);
}
try(ImageOutputStream outputStream=新文件ImageOutputStream(新文件(“Landscape\u 3\u discard\u exif.jpg”)){
writer.setOutput(outputStream);
write(image.getrenderimage());
}
}
陷阱:

  • 一般来说,它和图像io框架一样慢
  • 对于一些罕见的图像,它莫名其妙地失败了。示例(javax.imageio.IIOException:非JPEG文件:以0xff 0xe2开头)
  • 它要求对源图像和目标图像使用相同的颜色模型。因此,不能使用双线性或双三次插值

否-什么是“exif”?我从没听说过。是的,这就是我需要的——维基百科:Exif数据嵌入到图像文件本身中。虽然许多最新的图像处理程序在写入修改后的图像时识别并保留Exif数据,但大多数较旧的程序并非如此。我会试试这个软件包,让你知道……不,那只是为了提取/阅读。我现在发现了这个包:org.apache.sanselano-什么是“exif”?我从没听说过。是的,这就是我需要的——维基百科:Exif数据嵌入到图像文件本身中。虽然许多最新的图像处理程序在写入修改后的图像时识别并保留Exif数据,但大多数较旧的程序并非如此。我会试试这个软件包,让你知道……不,那只是为了提取/阅读。我现在找到了这个包:org.apache.sanselan