web-dev-qa-db-fra.com

Python Wand convert PDF to PNG disable transparent (alpha_channel)

J'essaie de convertir un PDF en PNG - tout cela fonctionne bien, cependant, l'image de sortie est toujours transparente même si je pense l'avoir désactivée:

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

Ce qui précède produit les images mais est transparent, j'ai également essayé ce qui suit:

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

ce qui produit cette erreur:

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
18
Munro

J'ai également eu quelques PDF à convertir en PNG. Cela a fonctionné pour moi et semble plus simple que la composition d'images, comme indiqué ci-dessus .:

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.

Référence: wand.image

10
Manuel Riel

À partir d'un réponse précédente , essayez de créer une image vide avec une couleur d'arrière-plan, puis composez dessus.

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")
9
emcconville

L'autre réponse (composition avec une image blanche) fonctionne, mais uniquement sur la dernière page, tout comme la définition directe du canal alpha. Les travaux suivants sur la baguette 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)

Je pense que c'est probablement un bug dans la baguette. Il semble que la définition du canal alpha pour un PDF devrait affecte toutes les pages, mais ce n'est pas le cas.

2
RecursivelyIronic

Pour ceux qui ont toujours des problèmes avec cela, j'ai trouvé une solution (cela fonctionne dans les versions 0.4.1 et supérieures, je ne suis pas sûr des versions antérieures). Vous devez donc simplement utiliser quelque chose comme ceci:

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