我想用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
答案 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)