Вы ищете «межпроцессное взаимодействие» (IPC) - вы можете использовать что-то вроде XML-RPC, которое в основном позволяет вам вызывать функцию в удаленном процессе и обрабатывает перевод всех типов данных аргумента между языками ( так что вы можете вызвать функцию PHP из Python или наоборот - при условии, что аргументы имеют поддерживаемый тип )
Python имеет встроенный сервер XML-RPC и клиент
В библиотеке phpxmlrpc есть и клиент, и сервер
Существуют примеры для обоих: Python-сервер и клиент и PHP-клиент и сервер
Я думаю, чтение файла в объект Bitmap и запись в файл снова должен сделать свое дело.
Я помню, как чувствовал разочарование, когда выполнял свою «программу поворота изображений» из-за того, что она удалила данные EXIF. Но в данном случае это именно то, что вам нужно!
чего вам следует избегать, так это декодировать и перекодировать ваши изображения, потому что это ухудшит качество. вместо этого вы должны найти способ изменить только метаданные. Я не пробовал, но думаю, что InPlaceBitmapMetadataWriter поможет.
Если это только один файл, который вы пытались прочитать в пакет рисования, такой как Paint.NET или Paint Shop Pro, и повторно сохранить его как новый файл?
Возможно, вам потребуется скопировать файл изображение сначала в новый файл.
Конечно, если файлов много, это может быть не лучший подход;). Несмотря на то, что в Paint Shop Pro есть опция пакетного преобразования, которую, возможно, стоит изучить.
РЕДАКТИРОВАТЬ: все же, возможно, стоит исследовать пакетные операции в пакетах рисования (а не в пакетах для обработки фотографий, поскольку они с большей вероятностью сохранят данные EXIF) и посмотрите, можно ли их автоматизировать. Затем вы можете написать сценарий / пакетный файл для обработки ваших изображений.
Комментарий iik о чтении и записи файла, ухудшающего качество изображения, будет применяться в этом случае, но его можно свести к минимуму путем записи с минимальным сжатием.
Впервые я написал об этом с помощью библиотек 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();
}
}
}
}
}