Wand конвертировать 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
класс, и первая страница пишется снова и снова. Как получить второй кадр / страницу для сохранения?
2 ответа
Решение
Кажется, вы не можете получить файловые блобы, не связавшись с 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)
Не так чисто, как делать все это в памяти, но это делается.
На самом деле, вы можете получить блоб для каждого файла:
for img in image_jpeg.sequence:
img_page = Image(image=img)
Затем вы можете работать с каждой переменной img_page как с полноценным изображением: изменить формат, изменить размер, сохранить и т. Д.