Экспорт в растр

Вопросы связанные с работой ГИС Аксиома
Аватара пользователя
gisamap
Пользователь
Сообщения: 576
Зарегистрирован: 18 окт 2019, 11:03

Re: Экспорт в растр

Сообщение gisamap » Сегодня, 11:16

Добрый день.
Судя по всему Аксиома 7.1.2 PySide2 не поддерживает tif
Список поддерживаемых форматов можно получить так
formats = [f.data().decode('utf-8') for f in QImageWriter.supportedImageFormats()]
print("Поддерживаемые форматы:", formats)


Экспорт карты в tif , можно выполнить используя Pillow

Во вложении код
Вложения
export_map_pillow_4.py
(1.25 КБ) 12 скачиваний
Аватара пользователя
Александр
Администратор
Сообщения: 816
Зарегистрирован: 18 апр 2019, 11:21

Re: Экспорт в растр

Сообщение Александр » Сегодня, 16:39

Да, в Аксиоме 7.1.2 наблюдается проблема с использованием TIFF через QT.
Как мы выяснили, это связано с несовпадением версий 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!")
Ответить