Преобразование pdf в jpeg и сохранение страниц в файловых объектах

Я пытаюсь преобразовать pdf в jpeg с помощью палочки, но когда я перебираю SingleImages в image.sequence и сохраняю каждое изображение отдельно. Я сохраняю каждое изображение на AWS со ссылками на базу данных, используя Django.

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, и первая страница записывается снова и снова. Как получить второй кадр/страницу для сохранения?


person yarbelk    schedule 16.09.2013    source источник


Ответы (2)


Фактически, вы можете получить большие двоичные объекты для каждого файла:

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

Далее вы можете работать с каждой переменной img_page как с полноценным изображением: менять формат, изменять размер, сохранять и т.д.

person shroud    schedule 18.08.2014

Кажется, вы не можете получить большие двоичные объекты для каждого файла, не связываясь с c_types. Итак, это мое решение

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)

Не так чисто, как делать все это в памяти, но это делается.

person yarbelk    schedule 16.09.2013