У меня есть задача, которая требует от меня получения данных из загрузки изображений (jpg или png), изменения их размера в соответствии с требованиями, а затем преобразования их в pdf и последующего сохранения в s3.
- Файл приходит как ByteIO
- У меня есть
Pillow
, поэтому я могу изменить размер изображения с ним - Теперь тип файла
class 'PIL.Image.Image'
, и я не знаю, как продолжить. - Я нашел библиотеку
img2pdf
в https://gitlab.mister -muffin.de / josch / img2pdf , но я не знаю, как использовать ее, когда у меня есть формат PIL (используйте tobytes()
?) - Загрузка s3 также выглядит как файлоподобный объект, поэтому я не хочу сохранять его во временном файле перед его повторной загрузкой. Мне даже тогда нужен img2pdf в этом случае?
Как мне достичь этой цели?
РЕДАКТИРОВАТЬ: я пытался использовать tobytes()
и напрямую загружать в s3. Загрузка прошла успешно. Тем не менее, при загрузке, чтобы увидеть содержимое, он показывает пустую страницу. Кажется, что данные файла не записываются в файл PDF
РЕДАКТИРОВАТЬ 2: На самом деле пошел на s3 и проверить сохраненный файл. Когда я загружаю его и открываю, он показывает cannot be opened
РЕДАКТИРОВАТЬ 3: у меня действительно нет рабочего кода, поскольку я все еще экспериментирую, что может работать, но вот суть
data = request.FILES['file'].file # where the data is
im = Image.open(data)
(width, height) = (im.width // 2, im.height // 2) # example action I wanna take with Pillow
data = im_resized.tobytes()
# potential step for using img2pdf here but I don't know how
# img2pdf.convert(data) # this fails because "ImageOpenError: cannot read input image (not jpeg2000). PIL: error reading image: cannot identify image file <_io.BytesIO..."
# img2pdf.convert(im_resized) # this also fails because "TypeError: Neither implements read() nor is str or bytes"
upload_to_s3(data) # some function that utilizes boto3 to upload to s3