#python-3.x #image #image-processing #python-pptx #magickwand
#python-3.x #изображение #обработка изображений #python-pptx #волшебная палочка
Вопрос:
Я пытаюсь создать файл pptx или powerpoint с помощью python-pptx и прочитать изображение с помощью библиотеки python wand, но получаю ошибку типа AttributeError: объект «Изображение» не имеет атрибута «искать». Вы имели в виду: «семя»?
Примечание: Все файлы находятся в одной папке, начинающейся с «водяного знака».
from io import FileIO import os from wand.image import Image from pptx.util import Inches from pptx import Presentation def create_slide()-gt;FileIO: # Creating presentation object root = Presentation() for file in os.listdir(): if file.startswith('watermarked_'): # Creating slide layout first_slide_layout = root.slide_layouts[1] slide = root.slides.add_slide(first_slide_layout) shapes = slide.shapes #Adding title or heading to the slide title_shape = shapes.title title_shape.text = f" Created By python-pptx for Watermarking " #Adding sub-title with border to the slide body_shape = shapes.placeholders[1] tf = body_shape.text_frame tf.text = f"This is a watermarked image of {file}" with Image(filename = file) as watermarked_image: #Maintianing the aspect ratio of the image width, height = watermarked_image.size ratio = height/width new_width = width / 2 new_height = int(new_width * ratio) watermarked_image.resize(int(new_width), new_height) # Add the watermarked image to the slide slide.shapes.add_picture(watermarked_image ,Inches(1), Inches(3)) root.save("Output.pptx") create_slide()
Traceback (most recent call last): File "/Users/quantum/Desktop/image/project.py", line 60, in lt;modulegt; quantum@MacBook-Air image % python -u "/Users/quantum/Desktop/image/project.py" Traceback (most recent call last): File "/Users/quantum/Desktop/image/project.py", line 60, in lt;modulegt; create_slide() File "/Users/quantum/Desktop/image/project.py", line 57, in create_slide slide.shapes.add_picture(watermarked_image ,Inches(1), Inches(3)) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pptx/shapes/shapetree.py", line 332, in add_picture image_part, rId = self.part.get_or_add_image_part(image_file) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pptx/parts/slide.py", line 39, in get_or_add_image_part image_part = self._package.get_or_add_image_part(image_file) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pptx/package.py", line 36, in get_or_add_image_part return self._image_parts.get_or_add_image_part(image_file) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pptx/package.py", line 151, in get_or_add_image_part image = Image.from_file(image_file) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pptx/parts/image.py", line 168, in from_file if callable(getattr(image_file, "seek")): AttributeError: 'Image' object has no attribute 'seek'. Did you mean: 'seed'?
Любая частая помощь будет очень признательна
Комментарии:
1. отсутствует обратная связь, и код не содержит упоминания о
seek
ней . пожалуйста, обновите свой вопрос.
Ответ №1:
wand.image.Image
Объект не является допустимым аргументом для Shapes.add_picture()
. Первым аргументом этого вызова должен быть путь str к файлу изображения или файлоподобному объекту, содержащему изображение.
Я полагаю, это означает, что вам нужно будет сохранить измененное изображение в формате JPG или PNG или как-то еще, а затем указать имя файла. Вы также можете сохранить его в BytesIO
объект и передать его, .add_picture()
поскольку это будет считаться файлоподобным объектом и не потребует использования файловой системы.
Комментарии:
1. Спасибо, чувак, наконец-то я могу это сделать, просто добавив buf = io.BytesIO() изображение с водяными знаками.сохранить(buf ) buf.искать(0) # Добавить изображение с водяными знаками на слайд слайд.фигуры.добавить изображение(buf, дюймы(1), Дюймы(1))
2. Рад, что у вас все получилось @MdTausif, не забудьте принять ответ, который исправит вашу проблему, щелкнув галочку слева от ответа. Вот как вы говорите «Спасибо» здесь, на SO, и это также укрепляет вашу репутацию.