Centrer l'image avec python-pptx

Aperçu

python-pptx et Pillow (PIL) peuvent être utilisés pour insérer (au centre) une image au centre de PowerPoint.

Contexte

python-pptx est une bibliothèque qui vous permet de créer PowerPoint à partir de python. C'est très pratique, mais lorsque vous insérez une image dans une diapositive, vous ne pouvez spécifier la position d'insertion que dans la coordonnée supérieure gauche de l'image. Je voulais le centrer, mais je n'étais pas sûr qu'il y ait une telle option dans python-pptx. Par conséquent, le centrage a été réalisé en lisant l'image séparément avec une bibliothèque appelée Pillow et en acquérant la taille de l'image.

environnement

macOS Catalina version 10.15.3 python3.7.0

Installation

pip install python-pptx
pip install Pillow

code

from pptx import Presentation
from pptx.util import Inches
from PIL import Image

IMG_PATH = "/path/to/img_file"
IMG_DISPLAY_HEIGHT = Inches(3) #La hauteur de l'image lorsqu'elle est affichée sur une diapositive. Pour le moment, réglez-le sur 3 pouces.
SLIDE_OUTPUT_PATH = "test.pptx" #Chemin de sortie de la diapositive

#Définition d'objet de diapositive
prs = Presentation() 

#Obtenir la taille de la diapositive
SLIDE_WIDTH = prs.slide_width #
SLIDE_HEIGHT = prs.slide_height

#Ajouter une diapositive vierge
blank_slide_layout = prs.slide_layouts[6] 
slide = prs.slides.add_slide(blank_slide_layout)

#Obtenez la taille de l'image et obtenez le rapport hauteur / largeur
im = Image.open(IMG_PATH)
im_width, im_height = im.size
aspect_ratio = im_width/im_height

#Calculer la taille de l'image affichée
img_display_height = IMG_DISPLAY_HEIGHT
img_display_width = aspect_ratio*img_display_height

#Calculer la coordonnée supérieure gauche de l'image lors du centrage
left = ( SLIDE_WIDTH - img_display_width ) / 2
top = ( SLIDE_HEIGHT - img_display_height ) / 2

#Ajouter une image à la diapositive
slide.shapes.add_picture(IMG_PATH, left, top, height = IMG_DISPLAY_HEIGHT)

#Diapositive de sortie
prs.save(SLIDE_OUTPUT_PATH)

Avec le code ci-dessus, vous pouvez faire glisser un poteau d'alimentation avec la figure centrée comme indiqué ci-dessous. (L'image de test a été prise par l'auteur)

La partie Oreiller peut être n'importe quoi tant que le rapport hauteur / largeur de l'image originale peut être calculé, donc par exemple, opencv peut être utilisé à la place. D'après la documentation, python-pptx a une classe appelée Image qui a une propriété size, et il semble possible d'en obtenir la taille, mais je ne savais pas comment le faire. Il n'est pas intelligent d'utiliser Pillow uniquement pour obtenir la taille de l'image, donc si quelqu'un sait comment le faire avec python-pptx seul, j'apprécierais que vous puissiez m'apprendre.

C'est tout pour cet article. Merci d'avoir lu jusqu'ici.

Recommended Posts

Centrer l'image avec python-pptx
Télécharger automatiquement des images avec grattage
Images en bordure avec python Partie 1
Enregistrez des images avec le web scraping
Combinez deux images avec Django
Reconnaissance des nombres dans les images avec Python
Impossible de télécharger des images avec Google_images_download
Publiez plusieurs images Twitter avec python
Faisons une image LGTM avec GIMP! (Python-fu)
Comparez deux images avec le hachage d'image
Travailler avec des images DICOM en Python
Télécharger et télécharger des images avec Falcon
Classification multi-étiquette d'images multi-classes avec pytorch
Amplifiez les images pour l'apprentissage automatique avec Python
Capturer des images avec Pupil, python et OpenCV
Mettez les polices japonaises dans les images avec Colaboratory
Générez de nombreuses images à un seul caractère avec Pillow (PIL)
Ajouter des images à des photos iOS avec Pythonista
Transcription d'images avec l'API Vision de GCP
[Python] Lire des images avec OpenCV (pour les débutants)
Ajouter du bruit gaussien aux images avec python2.7
Génération automatique Powerpo avec python-pptx (mémo personnel)
Importer et exporter des images GeoTiff avec Python
Lire des caractères dans des images avec Python OCR
Télécharger des images sur Google Drive avec Python
Gérez les images transparentes avec OpenCV - Faites danser les sprites