4

我正在尝试使用 wand 将 pdf 转换为 jpeg,但是当我遍历 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类,一遍一遍的写第一页。如何获取第二帧/页面以进行保存?

4

2 回答 2

5

实际上,您可以获得每个文件的 blob:

for img in image_jpeg.sequence:
    img_page = Image(image=img)

然后,您可以像处理完整图像一样使用每个 img_page 变量:更改格式、调整大小、保存等。

于 2014-08-18T20:17:47.807 回答
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)

不像在内存中做这一切那样干净,但它完成了。

于 2013-09-16T07:31:56.873 回答