2014-03-28 2 views
0

Каков самый простой способ удалить exif-данные с изображения, а затем переместить их в другую папку? То же местоположение, только в папке. Таким образом, есть оригинальные копии.Удалить Exif данные из изображения в java?

Спасибо.

+0

Прочитать в байтах, найти то, что вы хотите удалить, удалить. Я уверен, что формат jpeg доступен в Интернете, если вы Google для него. Или вы можете использовать один из нескольких бесплатных автономных редакторов изображений, доступных в Интернете. –

+0

Что у вас есть? – RyPope

+0

Связанные: http://stackoverflow.com/questions/37062959/how-to-remove-image-metadata-from-large-images-without-out-of-memory-in-java – Thilo

ответ

0

Я думаю, что простой способ сделать это - прочитать его как изображение, а затем записать его в новую папку, используя ImageIO.read(...) и ImageIO.write(...). Я не думаю, что у Image есть метаданные. Если это не сработает, вы можете записать его как bmp, а затем перечитать его и записать снова как jpeg.

0

Все, что вам нужно сделать, это двоичное чтение файла JPEG. Поиск маркеров APP1 (возможно, маркеров APP2, а также для расширений). Скопируйте байт по байту из источника в пункт назначения. Когда вы нажимаете маркер APP1 (или APP2), прекратите копирование и прочитайте следующий маркер перед возобновлением копирования.

Проблема, создаваемая этим, заключается в том, что ваш поток JPEG не имеет никакого значения. JPEG сам по себе не имеет определения цветовых компонентов. Это происходит от маркеров Exif (или JFif).

0

Если и уверены, что все ваши фотографии JPG формат, можно использовать

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 и нужно читать/писать свой образ, но этот метод является более медленным, чем первый один

// read input stream into bufferedImage 
private static BufferedImage readPhotoStream(InputStream stream) throws IOException { 

    // 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) { 
      LOG.error("Ignored error reading photo while processing: ", e); 
     } 

     return img; 
    } 

    // here u remove 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, extension, os); 

    } 
    catch (IOException e) { 

     System.err.println(e); 
    } 
Смежные вопросы