[英]Python + Wand.Image - saving output images to AWS with sequential pagenumber.jpg names
[英]Python Wand.image PDF to JPG in memory converter
我正在嘗試編寫一些代碼,將駐留在網絡上的PDF轉換為一系列jpg。
我得到的工作代碼是:
1)需要pdf
2)將其保存到磁盤
3)將其轉換為JPG,並保存到磁盤。
有沒有一種方法可以編寫相同的代碼(嘗試在下面的代碼中拋出錯誤),該方法將從互聯網上獲取PDF,但將其保留在內存中(以防止程序寫入磁盤/從磁盤讀取),然后將其轉換為JPG(要上傳到AWS s3)?
我以為這會工作:
f = urlopen("https://s3.us-east-2.amazonaws.com/converted1jpgs/example.pdf") #file to process
但我得到以下錯誤:
“>中的Exception TypeError:TypeError(“類型'NoneType'的對象沒有len()”,)>已忽略”
完整代碼以及要轉換的正確PDF文件。 注意:如果我將f =替換為磁盤上保存的PDF的位置,則該代碼有效:
from urllib2 import urlopen
from wand.image import Image
#location on disk
save_location = "/home/bob/Desktop/pdfs to convert/example1"
#file prefix
test_id = 'example'
print 1
f = urlopen("https://s3.us-east-2.amazonaws.com/converted1jpgs/example.pdf")
print 2
print type(f)
with Image(filename=f) as img:
print('pages = ', len(img.sequence))
with img.convert('jpg') as converted:
converted.save(filename=save_location+"/"+test_id+".jpg")
urlopen
的結果顯然不是文件名,因此您不能傳遞filename=f
並期望它能工作。
我沒有安裝Wand,但是從docs來看,顯然有很多替代方法可以構建它。
首先, urlopen
是一個類似文件的對象。 當然,“類文件對象”這個詞有些含糊,並非所有類文件對象都適用於所有希望有類文件對象的API(例如,API可能希望能夠在fileno
中調用fileno
並從中讀取fileno
。 POSIX級…),但這至少值得一試(注意file
而不是filename
):
with Image(file=f) as img:
如果那不起作用,您可以隨時將數據讀入內存:
buf = f.read()
with Image(blob=buf) as img:
不太理想(如果您有巨大的文件),但是至少不必將其存儲在磁盤上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.