是否在java中从映像中删除Exif数据?

是否在java中从映像中删除Exif数据?,java,jpeg,exif,Java,Jpeg,Exif,从图像中删除exif数据然后将其移动到另一个文件夹的最简单方法是什么?相同的位置,只是在一个文件夹中。这样就有了原件 谢谢。我认为一个简单的方法是将其作为图像读取,然后使用ImageIO.read(…)和ImageIO.write(…)将其写入新文件夹。我认为Images没有元数据。如果不起作用,您可以将其作为bmp写入,然后重新读取并以jpeg格式再次写入。您只需对jpeg文件进行二进制读取。搜索APP1标记(可能还有扩展名的APP2标记)。从源到目标逐字节复制。当您点击APP1(或APP2)

从图像中删除exif数据然后将其移动到另一个文件夹的最简单方法是什么?相同的位置,只是在一个文件夹中。这样就有了原件


谢谢。

我认为一个简单的方法是将其作为图像读取,然后使用
ImageIO.read(…)
ImageIO.write(…)
将其写入新文件夹。我认为
Image
s没有元数据。如果不起作用,您可以将其作为bmp写入,然后重新读取并以jpeg格式再次写入。

您只需对jpeg文件进行二进制读取。搜索APP1标记(可能还有扩展名的APP2标记)。从源到目标逐字节复制。当您点击APP1(或APP2)标记时,请停止复制并在继续复制之前读取到下一个标记


这造成的问题是您的JPEG流没有任何意义。JPEG本身没有颜色组件的定义。它来自Exif(或JFif)标记

如果您确定所有照片都是JPEG格式,您可以使用:

    try (
        FileInputStream is = new FileInputStream(new File("/path/to/photo.jpg"));
        FileOutputStream os = new FileOutputStream(new File("/path/to/photo_without.jpg"))) {

        new ExifRewriter().removeExifMetadata(is, os);
    }
    catch (IOException | ImageWriteException | ImageReadException e) {
        System.err.println(e);
    }
否则,如果您有png/bmp/jpg,则需要读取/写入图像,但此方法比第一种方法慢:

    // instead of just using ImageIO.read(stream)
    // https://github.com/haraldk/TwelveMonkeys/issues/197
    try (ImageInputStream input = ImageIO.createImageInputStream(stream)) {
        Iterator<ImageReader> readers = ImageIO.getImageReaders(input);

        if (!readers.hasNext()) return null;

        ImageReader reader = readers.next();
        reader.setInput(input);
        ImageReadParam param = reader.getDefaultReadParam();
        BufferedImage img = reader.getImageTypes(0).next().createBufferedImage(reader.getWidth(0), reader.getHeight(0));
        param.setDestination(img);

        try {
            img = reader.read(0, param);
        } catch (IOException e) {
            logger.error("Ignored error reading photo while processing: ", e);
        }

        return img;
    }

    // here you remove the exif
    try (
            FileInputStream is = new FileInputStream(new File("/path/to/photo.jpg"));
            FileOutputStream os = new FileOutputStream(new File("/path/to/photo_without.jpg"))) {

        BufferedImage bi = readPhotoStream(is);
        ImageIO.write(bi, "extensionString", os);

    } catch (IOException e) {

        System.err.println(e);
    }
//而不仅仅是使用ImageIO.read(流)
// https://github.com/haraldk/TwelveMonkeys/issues/197
try(ImageInputStream输入=ImageIO.createImageInputStream(流)){
迭代器读卡器=ImageIO.getImageReaders(输入);
如果(!readers.hasNext())返回null;
ImageReader=readers.next();
reader.setInput(输入);
ImageReadParam param=reader.getDefaultReadParam();
BuffereImage img=reader.getImageTypes(0.next().CreateBuffereImage(reader.getWidth(0),reader.getHeight(0));
参数设置目的地(img);
试一试{
img=读卡器读取(0,参数);
}捕获(IOE异常){
logger.error(“处理时读取照片时忽略错误:”,e);
}
返回img;
}
//在这里,您可以删除exif
试一试(
FileInputStream is=newFileInputStream(新文件(“/path/to/photo.jpg”);
FileOutputStream os=新的FileOutputStream(新文件(“/path/to/photo\u,不带.jpg”)){
BuffereImage bi=readPhotoStream(is);
写入(bi,“扩展字符串”,os);
}捕获(IOE异常){
系统错误println(e);
}

读入字节,找到要删除的内容,将其删除。我敢肯定,如果你在谷歌上搜索,jpeg格式在网上是可用的。或者,您可以使用在线提供的几种免费独立图像编辑器中的一种。到目前为止,您获得了什么?相关: