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
5 ответов
У меня также было несколько 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
Из предыдущего ответа попробуйте создать пустое изображение с цветом фона, а затем составить поверх.
from wand.image import Image
from wand.color import Color
with Image(filename="sample.pdf", resolution=300) as img:
with Image(width=img.width, height=img.height, background=Color("white")) as bg:
bg.composite(img,0,0)
bg.save(filename="image.png")
Компилируя другие ответы, вот функция, которую я использую для преобразования PDF в страницы:
import os
from wand.image import Image
from wand.color import 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)
Для тех, у кого все еще есть проблема, я нашел решение (оно работает в версии 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')
Другой ответ (наложение с белым изображением) работает, но только на последней странице, так же, как и установка альфа-канала напрямую. Следующие работы над палочкой 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 должна влиять на все страницы, но это не так.