У меня есть код Python, который редактирует файлы изображений и хотел бы знать, как для добавления данных изображения в буфер обмена операционной системы и получения оттуда.
При поиске кросс-платформенного решения для замены или получения текста буфера обмена в Python,
было много простых ответов для этого (например, используя встроенный модуль Tkinter с some code).
Однако эти методы могут использовать только обычный текст, а не другие данные буфера обмена, такие как изображения.
Моя версия Python - 3.x для Windows, но ответ должен быть кросс-платформенным
(работа в разных операционных системах), а также поддержка других версий Python, таких как 2.x.
Я думаю, что он должен использовать только встроенные модули Python, и код не должен быть слишком сложным (или иметь объяснение того, что он делает). Это может быть модуль Python, потому что файлы могут быть включены в ту же папку, что и переносимый программный код, чтобы избежать установки.
Есть и другие связанные с этим вопросы, которые, вероятно, работают для изображений, но они поддерживают только отдельную операционную систему. Лучшие были Скопировать изображение в буфер обмена в Python3 и Написать образ в буфер обмена Windows в python с PIL и win32clipboard?.
Описанные здесь методы (только для Windows) используют следующие шаги:
- Получить сырые двоичные данные изображения - метод загружает файл изображения с помощью Python Imaging
Library (PIL/Pillow), потому что у этого есть другие функции обработки, используемые позже, в простой форме и популярный стандартный API. Это можно сделать с помощью другого модуля (например, Pygame). - Создайте переменную объекта файла (для потоковой передачи ввода/вывода в памяти), используя встроенный io
модуль. Для Python 2.x используетсяfrom cStringIO import StringIO
, но с Python 3,
лучшийio.BytesIO
тип объекта двоичного потока - более старые теперь разрешают только текст. - Сохранение данных изображения в формате BMP (формат растрового изображения/растрового изображения Windows),
к переменной объекта файла с предыдущего шага. Метод, использующий PIL/Pillow, сначала преобразует эти данные с.convert("RGB")
для переменной, содержащей ее. - Получить полное содержимое буфера памяти переменных объекта объекта в виде двоичных данных (объект
bytes
),
отрежьте его из положения 14, чтобы удалить 14-байтовый заголовок формата BMP/DIB, затем сохраните его
как переменную. Метод говорит, что нарезка этих данных работает на 32 или 64-битных системах, но
нужен API буфера обмена Windows, поэтому он не работает для другого формата файла. - Закройте буфер памяти и скопируйте данные изображения с предыдущего шага в буфер обмена.
Этот метод используется в Windows с помощью частиwin32clipboard
модуля расширения -
он открывает буфер для использования, очищает его, устанавливает его значение в переменную данных изображения из файла предыдущий шаг (с использованием типа BMP/DIB) закрывает открытый буфер обмена.
Кроме того, есть простой текстовый модуль с межплатформенным буфером обмена, называемый Pyperclip, который является только один файл для версии 1.5.6 и, возможно, имеет код, который может обрабатывать данные изображения.