Прозрачность в PNG с reportlab 2.3

У меня есть два PNG, которые я пытаюсь объединить в PDF, используя ReportLab 2.3 на Python 2.5. Когда я использую canvas.drawImage(ImageReader) для записи PNG на холст и сохранения, прозрачность становится черной. Если я использую PIL (1.1.6) для создания нового изображения, а затем вставляю () либо PNG в изображение PIL, он отлично компонуется. Я дважды проверил в Gimp, и оба изображения имеют рабочие альфа-каналы и сохраняются правильно. Я не получаю сообщение об ошибке, и, похоже, мой гугл-фу ничего не может найти.

Кто-нибудь скомпоновал прозрачный PNG на холст ReportLab, чтобы прозрачность работала правильно? Спасибо!


person Dire Fungasaur    schedule 20.08.2009    source источник


Ответы (3)


Передача параметра маски со значением 'auto' в drawImage исправляет это для меня.

drawImage(......., mask='auto')

Дополнительная информация о функции drawImage

person tsidwick    schedule 26.10.2009
comment
Онлайн-документы, созданные с помощью Sphinx, являются очень плохой документацией. Вместо этого я нашел более полезным руководство пользователя в формате pdf reportlab.com/docs/reportlab-userguide.pdf Об этой конкретной проблеме см. раздел «Методы работы с изображениями» в главе 2 «Графика и текст с помощью pdfgen». Они объясняют ключевое слово mask param. - person shakaran; 01.11.2013

Я обнаружил, что mask='auto' перестал работать у меня с reportlab 3.1.8. В документах говорится передать значения, которые вы хотите замаскировать. Итак, что работает для меня сейчас, так это mask=[0, 2, 0, 2, 0, 2, ]. В основном это выглядит так: `mask=[red_start, red_end, green_start, green_end, blue_start, blue_end,]

Параметр маски позволяет создавать прозрачные изображения. Он принимает 6 чисел и определяет диапазон значений RGB, которые будут замаскированы или обработаны как прозрачные. Например, с [0,2,40,42,136,139] он будет маскировать любые пиксели со значением красного от 0 или 1, зеленого от 40 или 41 и синего от 136, 137 или 138 (по шкале от 0 до 255). . В настоящее время ваша работа заключается в том, чтобы узнать, какой цвет является «прозрачным» или фоновым.

ОБНОВЛЕНИЕ: это маскирует все, что является rgb(0, 0, 0) или rgb(1, 1, 1), что, очевидно, может быть неправильным решением. Моя проблема заключалась в том, что люди загружали изображения png с серым цветовым пространством. Поэтому мне все еще нужно найти способ определить цветовое пространство изображения. и применяйте эту маску только к изображениям серого пространства.

person teewuane    schedule 07.02.2015
comment
Я использую черно-белое изображение. Кажется, я не могу найти решение, поэтому я просто отфотошопил изображение, чтобы иметь белый фон. Путь, путь, путь быстрее. - person varagrawal; 13.10.2016
comment
@varagrawal Если вы открываете исходное изображение в фотошопе, вы должны проверить, какое цветовое пространство оно использует. Вероятно, это шкала серого. Если бы вы изменили цветовое пространство на RGB, изображение выглядело бы так же, но было бы немного больше размера файла, но это сработало бы, и вы могли бы сохранить прозрачность. - person teewuane; 14.10.2016

ReportLab использует PIL для управления изображениями. В настоящее время к магистрали PIL применяется патч для поддержки прозрачных PNG, но вам придется дождаться выпуска 1.1.6, если вам нужен стабильный пакет.

person iElectric    schedule 21.08.2009