Добрый день.
Судя по всему Аксиома 7.1.2 PySide2 не поддерживает tif
Список поддерживаемых форматов можно получить так
formats = [f.data().decode('utf-8') for f in QImageWriter.supportedImageFormats()]
print("Поддерживаемые форматы:", formats)
Экспорт карты в tif , можно выполнить используя Pillow
Во вложении код
Экспорт в растр
Re: Экспорт в растр
- Вложения
-
- export_map_pillow_4.py
- (1.25 КБ) 13 скачиваний
Re: Экспорт в растр
Да, в Аксиоме 7.1.2 наблюдается проблема с использованием TIFF через QT.
Как мы выяснили, это связано с несовпадением версий ABI библиотеки libtiff. Проблема наблюдается только в Windows.
В версии 8.0 эта ошибка будет исправлена.
А пока, для обхода этой проблемы в версии 7.1.2, можно использовать библиотеку Pillow (PIL) как посоветовали выше.
Если по каким-то причинам вам критично не писать временные файлы на диск (например, из-за прав доступа или скорости), можно конвертировать QImage напрямую в PIL.Image.
Как мы выяснили, это связано с несовпадением версий ABI библиотеки libtiff. Проблема наблюдается только в Windows.
В версии 8.0 эта ошибка будет исправлена.
А пока, для обхода этой проблемы в версии 7.1.2, можно использовать библиотеку Pillow (PIL) как посоветовали выше.
Если по каким-то причинам вам критично не писать временные файлы на диск (например, из-за прав доступа или скорости), можно конвертировать QImage напрямую в PIL.Image.
Code: Select all
from PySide2.QtGui import QImage
from PIL import Image
import numpy as np
def qimage_to_pil(qimage):
# Приводим QImage к формату RGBA8888
qimage = qimage.convertToFormat(QImage.Format_RGBA8888)
width = qimage.width()
height = qimage.height()
# Получаем сырые байты из QImage
# В PySide2 constBits() возвращает указатель, который мы преобразуем в bytes
ptr = qimage.constBits()
raw_data = bytes(ptr)
# Создаем numpy-массив и формируем из него PIL Image
arr = np.frombuffer(raw_data, dtype=np.uint8).reshape(height, width, 4)
return Image.fromarray(arr, 'RGBA')
# --- Проверка ---
image = QImage(r"D:\butterfly.png")
if not image.isNull():
pil_img = qimage_to_pil(image)
pil_img.save(r"D:\Test\butterfly.tif", "TIFF")
print("Файл успешно сохранен напрямую через PIL!")
