NonType用Wand输出文件

时间:2017-01-09 10:18:04

标签: python imagemagick blob wand

我想用ImageMagick和Wand保存PDF file as JPEG file(更准确地说,只是第一页)。

但是,当文件保存时,我打印文件类型,然后我得到NoneType。我需要获得uint8因为我必须在OpenCV之后使用每个JPEG图像。

#-*- coding: utf-8 -*-

from wand.image import Image
import os, shutil, glob


for PDF in os.listdir ("/Users/valentinjungbluth/Desktop/NAPS_PDF/") : #boucle sur tous les PDF du dossier

        if PDF.endswith('.pdf'):

                with Image(filename="/Users/valentinjungbluth/Desktop/NAPS_PDF/" + PDF, resolution=200) as convert :
                        name = PDF.split('.') #Récupération du nom
                        page = len(convert.sequence)

                        if page == 1 :  #Nombre de page = 1
                                convert.compression_quality = 100 #Qualité en %
                                saved = convert.save(filename="/Users/valentinjungbluth/Desktop/PDF_to_JPG/" + name[0] + ".jpg") #Enregistrement en JPEG sous la forme nom.jpg
                                print type(saved)


                        elif page > 1 : #Nombre de page > 1

                                for frame in convert.sequence : #Pour chaque page 
                                        img_page = Image(image=frame)
                                        img_page.compression_quality = 100 #Qualité en %
                                        img_page.save(filename="/Users/valentinjungbluth/Desktop/PDF_to_JPG/" + name[0] + ".jpg") #Enregistrement en JPEG sous la forme nom.jpg
                                        break

我找不到正确保存到jpeg文件而不是NoneType的方法。

你有任何想法吗?

编辑:

使用make_blob回复更新的脚本:

#-*- coding: utf-8 -*-

import os
from wand.image import Image


for PDF in os.listdir("/Users/valentinjungbluth/Desktop/NAPS_PDF/"): #boucle sur tous les PDF

    if PDF.endswith('.pdf'):

        with Image(filename="/Users/valentinjungbluth/Desktop/NAPS_PDF/" + PDF, resolution=200) as convert :
            name = PDF.split('.') #Récupération du nom
            page = len(convert.sequence)

            if page == 1 :  #Nombre de page = 1
                convert.compression_quality = 100 #Qualité en %
                blob = convert.make_blob("JPEG")
                #saved = convert.save(filename="/Users/valentinjungbluth/Desktop/PDF_to_JPG/" + name[0] + ".jpg") #Enregistrement en JPEG sous la forme nom.jpg
                print type(saved)


            elif page > 1 : #Nombre de page > 1

                for frame in convert.sequence : #Pour chaque page 
                    img_page = Image(image=frame)
                    img_page.compression_quality = 100 #Qualité en %
                    blob = img_page.make_blob("JPEG")
                    #convert.save(filename="/Users/valentinjungbluth/Desktop/PDF_to_JPG/" + name[0] + ".jpg") #Enregistrement en JPEG sous la forme nom.jpg
                    print type(blob)
                    break

1 个答案:

答案 0 :(得分:0)

我相信魔杖wand.image.Image.save不会返回任何数据。这有wand.image.Image.make_blob方法。

with Image(filename="...") as img:
  blob = img.make_blob("JPG")

以上内容将返回OpenCV的cv2.imdecode的jpeg数据。

byte_vector = numpy.fromstring(blob, numpy.uint8)
mat = cv2.imdecode(byte_vector, cv2.CV_LOAD_IMAGE_COLOR)

如果您需要将blob数据保存到文件中,并且不再拥有wand.Image实例,那么它就像它一样简单。

with open('myFile.jpg', 'w') as fd:
  fd.write(blob)