Подтвердить что ты не робот

Python Wand конвертировать PDF в PNG отключить прозрачный (alpha_channel)

Я пытаюсь преобразовать PDF в PNG - все это прекрасно работает, однако выходное изображение все еще прозрачно, даже если я считаю, что отключил его:

with Image(filename='sample.pdf', resolution=300) as img:
    img.background_color = Color("white")
    img.alpha_channel = False
    img.save(filename='image.png')

Вышеприведенные изображения, но прозрачные, я также попробовал следующее:

with Image(filename='sample.pdf', resolution=300, background=Color('white')) as img:
    img.alpha_channel = False
    img.save(filename='image.png')

который производит эту ошибку:

Traceback (most recent call last):
  File "file_convert.py", line 20, in <module>
    with Image(filename='sample.pdf', resolution=300, background=Color('white')) as img:
  File "/Users/Frank/.virtualenvs/wand/lib/python2.7/site-packages/wand/image.py", line 1943, in __init__
    raise TypeError("blank image parameters can't be used with image "
TypeError: blank image parameters can't be used with image opening parameters
4b9b3361

Ответ 1

У меня также были некоторые PDF файлы для преобразования в PNG. Это сработало для меня и кажется более простым, чем композиция изображений, как показано выше:

all_pages = Image(blob=self.pdf)        # PDF will have several pages.
single_image = all_pages.sequence[0]    # Just work on first page
with Image(single_image) as i:
    i.format = 'png'
    i.background_color = Color('white') # Set white background.
    i.alpha_channel = 'remove'          # Remove transparency and replace with bg.

Ссылка: wand.image

Ответ 3

Другой ответ (компоновка с белым изображением) работает, но только на последней странице, как и установка альфа-канала напрямую. Следующие работы по палочке 0.4.2:

im = wand_image(filename='/tmp/foo.pdf', resolution=200)
for i, page in enumerate(im.sequence):
    with wand_image(page) as page_image:
        page_image.alpha_channel = False
        page_image.save(filename='/tmp/foo.pdf.images/page-%s.png' % i)

Я думаю, что это, вероятно, ошибка в палочке. Кажется, что установка альфа-канала для PDF файла должна затрагивать все страницы, но это не так.

Ответ 4

Для тех, у кого проблема с этим, я нашел решение (он работает в версии 0.4.1 и выше, я не уверен в более ранних версиях). Поэтому вы должны просто использовать что-то вроде этого:

with Image(filename='sample.pdf', resolution=300) as img:
img.background_color = Color("white")
img.alpha_channel = 'remove'
img.save(filename='image.png')

Ответ 5

Компиляция других ответов, вот функция, которую я использую для преобразования PDF-страниц в страницы:

import os
import sys
import shutil

from wand.image import Image, Color


def convert_pdf(filename, output_path, resolution=150):
    """ Convert a PDF into images.

        All the pages will give a single png file with format:
        {pdf_filename}-{page_number}.png

        The function removes the alpha channel from the image and
        replace it with a white background.
    """
    all_pages = Image(filename=filename, resolution=resolution)
    for i, page in enumerate(all_pages.sequence):
        with Image(page) as img:
            img.format = 'png'
            img.background_color = Color('white')
            img.alpha_channel = 'remove'

            image_filename = os.path.splitext(os.path.basename(filename))[0]
            image_filename = '{}-{}.png'.format(image_filename, i)
            image_filename = os.path.join(output_path, image_filename)

            img.save(filename=image_filename)