2009-08-20 3 views
20

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

Неужели кто-то там собрал прозрачный PNG на холст ReportLab, при этом прозрачность работает правильно? Благодаря!

ответ

47

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

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

More information on the drawImage-function

+0

Работал для меня тоже - спасибо! –

+0

Yup, это делает. Благодаря! –

+1

FYI документы 'drawImage' доступны здесь: http://www.reportlab.com/apis/reportlab/dev/pdfgen.html#reportlab.pdfgen.canvas.Canvas.drawImage – dkamins

0

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

1

Я обнаружил, что mask='auto' перестал работать для меня с ReportLab 3.1.8. В документах говорится, чтобы передать значения, которые вы хотите замаскировать. Так что теперь для меня работает mask=[0, 2, 0, 2, 0, 2, ]. В основном это выглядит следующим образом `маски = [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). Это в настоящее время ваша работа, чтобы узнать, какой цвет является «прозрачным» или фоном.

UPDATE: Это маски из всего, что есть rgb(0, 0, 0) или rgb(1, 1, 1), которые, очевидно, не может быть правильным решением. Моя проблема заключалась в том, что пользователи загружали PNG-изображения с серого цветового пространства. Поэтому мне нужно все же выяснить способ определения цветового пространства изображения. и применять эту маску только к серым пространственным изображениям.

+0

Я использую черно-белое изображение. Не может показаться, что вы исправите исправление, поэтому я просто поместил фотографию на белый фон. Путь, путь, путь быстрее. – varagrawal

+0

@varagrawal Если вы откроете свое исходное изображение в фотошопе, вы должны проверить, какое цветовое пространство оно использует. Вероятно, это серый цвет. Если вы хотите изменить цветовое пространство на RGB, изображение будет выглядеть одинаково, но оно будет немного большим размера файла, но это сработает, и вы сможете сохранить прозрачность. – teewuane

Смежные вопросы