2017-01-09 29 views
0

我想用ImageMagick和魔杖保存PDF file as JPEG file(更準確地說,只有第一頁)。使用魔杖的無類型輸出文件

但是,當文件保存時,我打印文件類型,我得到NoneType。我需要得到uint8,因爲我必須使用每個JPEG圖像以及OpenCV之後。

#-*- 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 

回答

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) 
+0

@emcconvile我編輯了我的腳本與您的問題,但我怎樣才能將我的JPEG保存爲blob二進制字符串?因爲如果我寫了:'blob.save',我得到一個錯誤:'AttributeError:'str'object has no attribute'save'' – Deadpool

+0

'blob'變量將是二進制字符串。 – emcconville

+0

以及如何使用OpenCV保存並解碼它? – Deadpool