Простой способ удалить данные EXIF из JPEG с.NET

Вы ищете «межпроцессное взаимодействие» (IPC) - вы можете использовать что-то вроде XML-RPC, которое в основном позволяет вам вызывать функцию в удаленном процессе и обрабатывает перевод всех типов данных аргумента между языками ( так что вы можете вызвать функцию PHP из Python или наоборот - при условии, что аргументы имеют поддерживаемый тип )

Python имеет встроенный сервер XML-RPC и клиент

В библиотеке phpxmlrpc есть и клиент, и сервер

Существуют примеры для обоих: Python-сервер и клиент и PHP-клиент и сервер

14
задан Peter Mortensen 17 November 2018 в 09:22
поделиться

4 ответа

Я думаю, чтение файла в объект Bitmap и запись в файл снова должен сделать свое дело.

Я помню, как чувствовал разочарование, когда выполнял свою «программу поворота изображений» из-за того, что она удалила данные EXIF. Но в данном случае это именно то, что вам нужно!

6
ответ дан 1 December 2019 в 08:43
поделиться

чего вам следует избегать, так это декодировать и перекодировать ваши изображения, потому что это ухудшит качество. вместо этого вы должны найти способ изменить только метаданные. Я не пробовал, но думаю, что InPlaceBitmapMetadataWriter поможет.

0
ответ дан 1 December 2019 в 08:43
поделиться

Если это только один файл, который вы пытались прочитать в пакет рисования, такой как Paint.NET или Paint Shop Pro, и повторно сохранить его как новый файл?

Возможно, вам потребуется скопировать файл изображение сначала в новый файл.

Конечно, если файлов много, это может быть не лучший подход;). Несмотря на то, что в Paint Shop Pro есть опция пакетного преобразования, которую, возможно, стоит изучить.

РЕДАКТИРОВАТЬ: все же, возможно, стоит исследовать пакетные операции в пакетах рисования (а не в пакетах для обработки фотографий, поскольку они с большей вероятностью сохранят данные EXIF) и посмотрите, можно ли их автоматизировать. Затем вы можете написать сценарий / пакетный файл для обработки ваших изображений.

Комментарий iik о чтении и записи файла, ухудшающего качество изображения, будет применяться в этом случае, но его можно свести к минимуму путем записи с минимальным сжатием.

0
ответ дан 1 December 2019 в 08:43
поделиться

Впервые я написал об этом с помощью библиотек WPF в своем блоге, но это не удалось, поскольку вызовы бэкэнда Windows немного запутались.

Мое окончательное решение также намного быстрее, которое в основном байтовое исправляет jpeg в чтобы удалить exif. Быстро и просто :)

[РЕДАКТИРОВАТЬ: сообщение в блоге содержит более обновленный код]

namespace ExifRemover
{
  public class JpegPatcher
  {
    public Stream PatchAwayExif(Stream inStream, Stream outStream)
    {
      byte[] jpegHeader = new byte[2];
      jpegHeader[0] = (byte) inStream.ReadByte();
      jpegHeader[1] = (byte) inStream.ReadByte();
      if (jpegHeader[0] == 0xff && jpegHeader[1] == 0xd8)
      {
        SkipExifSection(inStream);
      }

      outStream.Write(jpegHeader,0,2);

      int readCount;
      byte[] readBuffer = new byte[4096];
      while ((readCount = inStream.Read(readBuffer, 0, readBuffer.Length)) > 0)
        outStream.Write(readBuffer, 0, readCount);

      return outStream;
    }

    private void SkipExifSection(Stream inStream)
    {
      byte[] header = new byte[2];
      header[0] = (byte) inStream.ReadByte();
      header[1] = (byte) inStream.ReadByte();
      if (header[0] == 0xff && header[1] == 0xe1)
      {
        int exifLength = inStream.ReadByte();
        exifLength = exifLength << 8;
        exifLength |= inStream.ReadByte();

        for (int i = 0; i < exifLength - 2; i++)
        {
          inStream.ReadByte();
        }
      }
    }
  }
}
25
ответ дан 1 December 2019 в 08:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: