Python Wand convierte de PDF a JPG de fondo es incorrecto

Encontré una cosa tan conectada al convertir un pdf a jpeg, así que me gustaría descubrir que tal vez este es un pequeño error. Vea el jpg convertido a continuación, puede encontrar que, el color de fondo es todo negro. La imagen está aquí: www.shdowin.com/public/02.jpg

Sin embargo, en el archivo fuente de pdf, puede ver que el color de fondo es blanco normal. La imagen está aquí: www.shdowin.com/public/normal.jpg

Pensé que tal vez la falla de mi archivo pdf, sin embargo, cuando bash utilizar Acrobat.pdf2image en un entorno .NET, el jpg convertido se muestra correctamente.

Aquí está mi código:

from wand.image import Image from wand.color import Color import os, os.path, sys def pdf2jpg(source_file, target_file, dest_width, dest_height): RESOLUTION = 300 ret = True try: with Image(filename=source_file, resolution=(RESOLUTION,RESOLUTION)) as img: img.background_color = Color('white') img_width = img.width ratio = dest_width / img_width img.resize(dest_width, int(ratio * img.height)) img.format = 'jpeg' img.save(filename = target_file) except Exception as e: ret = False return ret if __name__ == "__main__": source_file = "./02.pdf" target_file = "./02.jpg" ret = pdf2jpg(source_file, target_file, 1895, 1080) 

¿Alguna sugerencia para el problema?

He subido el pdf a la url: 02.pdf

Puedes probar…

Una solución fácil es cambiar el orden de los comandos: cambiar el formato a jpeg primero y luego cambiar el tamaño

  img.format = 'jpeg' img.resize(dest_width, int(ratio * img.height)) 

También es muy fácil abrir el PDF en el tamaño exacto por la tupla de resolución, ya que la resolución puede ser un número flotante.

Tengo la respuesta por mí mismo. Es por el caso del canal alfa. Este pdf incluye un fondo transparente (después de transferirlo al formato png), y para cambiar el tamaño, ImageMagick elige el mejor filtro de tamaño, por lo que se muestra un fondo negro.

Entonces, después de muchos experimentos, encontré que solo agregue “img.alpha_channel = False” in “with” enunciado (antes de img.save ()), que funcionaría correctamente.

Gracias por el consejo de VadimR, es útil.

Para otras personas que todavía tienen este problema, lo solucioné después de buscar en Google e intentarlo un par de horas gracias a esta pregunta https://stackoverflow.com/a/40494320/2686243 usando estas dos líneas:

 img.background_color = Color("white") img.alpha_channel = 'remove' 

Probado con varita versión 0.4.4