我正在尝试使用wand将pdf转换为jpegs,但是当我在image.sequence中迭代SingleImages并分别保存每个图像时。我使用Django在AWS上保存每个图像,包括数据库引用。
image_pdf = Image(blob=pdf_blob)
image_jpeg = image_pdf.convert('jpeg')
for img in image_jpeg.sequence:
memory_file = SimpleUploadedFile(
"{}.jpeg".format(img.page_number),
page.container.make_blob())
spam = Spam.objects.create(
page_image=memory_file,
caption="Spam")
这不起作用,page.container
正在调用父Image
类,并且第一页被反复写入。如何获取第二帧/页面进行保存?
答案 0 :(得分:5)
实际上,你可以获得每个文件的blob:
for img in image_jpeg.sequence:
img_page = Image(image=img)
然后你可以使用每个img_page变量,就像一个完整的图像:更改格式,调整大小,保存等。
答案 1 :(得分:1)
似乎你不能在不弄乱c_types的情况下获得每个文件blob。所以这是我的解决方案
from path import path # wrapper for os.path
import re
import tempfile
image_pdf = Image(blob=pdf_blob)
image_jpeg = image_pdf.convert('jpeg')
temp_dir = path(tempfile.mkdtemp())
# set base file name (join)
image_jpeg.save(temp_dir / 'pdf_title.jpeg')
images = temp_dir.files()
sorted_images = sorted(
images,
key=lambda img_path: int(re.search(r'\d+', img_path.name).group())
)
for img in sorted_images:
with open(img, 'rb') as img_fd:
memory_file = SimpleUploadedFile(
img.name,
img_fd.read()
)
spam = Spam.objects.create(
page_image=memory_file,
caption="Spam Spam",
)
tempfile.rmtree(tempdir)
不像在内存中那样干净,但它完成了它。