【问题标题】:Remove Exif data from image in java?从java中的图像中删除Exif数据?
【发布时间】:2020-01-02 08:56:18
【问题描述】:

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

谢谢。

【问题讨论】:

  • 读入字节,找到要删除的内容,将其删除。如果您使用 Google 搜索,我确信 jpeg 格式可以在线获取。或者,您可以使用在线提供的几种免费独立图像编辑器之一。
  • 到目前为止你得到了什么?

标签: java jpeg exif


【解决方案1】:

如果您确定所有照片都是 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);
    }

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您需要做的就是对 JPEG 文件进行二进制读取。搜索 APP1 标记(可能还有 APP2 标记以及扩展名)。从源逐字节复制到目标。当您点击 APP1(或 APP2)标记时,停止复制并读取到下一个标记,然后再继续复制。

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

      【讨论】:

        猜你喜欢
        • 2013-11-17
        • 2015-02-22
        • 1970-01-01
        • 1970-01-01
        • 2013-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-28
        相关资源
        最近更新 更多