Divisez chaque diapositive PowerPoint en un fichier JPG et exportez-le avec python

introduction

Vous voulez convertir un fichier PPT en JPG et l'utiliser pour la création de documents? J'ai trouvé une personne qui travaille sur l'automatisation (https://qiita.com/natsutan/items/2487e24fe3f31569b40d), mais j'ai pensé que les deux points suivants étaient insuffisants.

Par conséquent, sur la base du nom du titre de la diapositive PPT, j'ai créé un logiciel qui génère chaque page sous forme de fichier JPG.

Environnement d'exploitation

Résultat d'exécution

--Lorsque vous l'exécutez sur Spyder, une fenêtre apparaît, dans laquelle vous pouvez sélectionner le fichier PowerPoint. --Le dossier images est créé et un fichier JPG est généré avec le nom du titre de chaque page.

実行結果.jpg

Comment utiliser

Combien de marges doivent être allouées à la largeur totale avec Marge dans le fichier? Avec whiteSpaceCutRatio, vous pouvez définir le pourcentage à couper à partir du haut (pour la coupe de titre). Veuillez ajuster en fonction de votre propre environnement.

Margin = 0.1; #marge
whiteSpaceCutRatio = 0.2; #Quel pourcentage de ce qui précède devrait être réduit? Ajusté pour chaque fichier PPT

Utilisation plus pratique

Si vous souhaitez générer un fichier batch en double-cliquant, créez un fichier batch comme celui ci-dessous. Vous pouvez générer une image à partir de PowerPoint en double-cliquant sans passer par UserInterface.

Explication du fichier batch

call C:\Users\hogemmacho\Anaconda3\Scripts\activate.bat 
C:\Users\hogemmacho\anaconda3\python.exe C:\Users\hogemmacho\Desktop\obenkyo\powerPointSlidesExportasJPG.py "C:\\Users\\hogemmacho\\Desktop\\obenkyo\\test1.pptx"

AnacondaPromptのpathの調べ方.jpg AnacondaPromptのpathの調べ方2.jpg

Autres notes diverses

OpenCV cv2.imread ne peut pas lire les noms de fichiers japonais. Donc, dans cette source, une fois converti en hogehogefugaFuga.jpg et traité avec Opencv Revenu au nom d'origine (Référence: https://qiita.com/SKYS/items/cbde3775e2143cad7455) .. Le japonais est ennuyeux avec python. Et merci à la personne qui a écrit l'article

Code d'exécution

# -*- coding: utf-8 -*-
"""
Created on Sat Jun 13 13:49:23 2020

@author: hogemaccho
"""
import tkinter as tk
from tkinter import filedialog
import os 
from comtypes import client
import cv2
import numpy as np
import shutil 
import sys

# notice:
#Si vous utilisez ce fichier sur un chemin de dossier qui inclut le Japon
#ne fonctionne pas correctement
#

# GlobalSetting Change here 
Margin = 0.1; #marge
whiteSpaceCutRatio = 0.2; #Quel pourcentage de ce qui précède devrait être réduit? Ajusté pour chaque fichier PPT



# Select PowerpointFile and get Absolute path 
def UIgetPPTFilePath(CurrentDirPath):
    root = tk.Tk()
    root.withdraw()
    typ = [('Fichier PPT','*.pptx')] 
    file_path = filedialog.askopenfilename(filetypes =typ, initialdir = CurrentDirPath)
    return file_path


# Create "images" dir
def makeImageDir(CurrentDirPath):
    ImageDirPath = CurrentDirPath+'\\images'
    if not(os.path.exists(ImageDirPath)):
        os.makedirs('images')
    return ImageDirPath
   
   
#Open PowerPoint and save Image for SaveDirpath  as JPG
def export_img(file_path,SaveDirPath):
    application = client.CreateObject("Powerpoint.Application")
    application.Visible = True
    presentation = application.Presentations.open(file_path)
    #SlideList = application.Acti
    slideList = application.ActivePresentation.Slides
    
    # Export JPG file  titlename = filename 
    for i in range(slideList.Count):
        #Initialize
        title = ""
        slide = slideList.Item(i+1) #Slides Start as 1 
        title = slide.Shapes.Title.TextFrame.TextRange.Text
        JPGFullPath = SaveDirPath+'\\'+title+'.jpg'
        slide.Export(JPGFullPath,'jpg')
        whiteSpaceCut(JPGFullPath,whiteSpaceCutRatio)
        
    presentation.close()
    application.quit()
    
    
    
#Cut Jpg white space 
def whiteSpaceCut(JPGFullPath,titleCutRatio):
    #Copy as a  countermeasure to  Japanese character 
    tempFileName = './hogehogefugaFuga.jpg'
    shutil.copy(JPGFullPath,tempFileName)
    
    #read jpg as gray Image 
    ImageData = cv2.imread(tempFileName,cv2.IMREAD_GRAYSCALE)
    
    CutImageData = cv2.imread(tempFileName,cv2.IMREAD_COLOR)
    CutImageData = CutImageData[round(ImageData.shape[0]*titleCutRatio):,:,:]
    
    #CutTitleData
    GrayImage = ImageData[round(ImageData.shape[0]*titleCutRatio):,:]
    
    #Serch White(r,g,b = 255,255,255) Area 
    GrayImageWidth = np.mean(GrayImage,axis = 0)
    GrayImageHeight = np.mean(GrayImage,axis = 1)

    GrayImageWidthStart = np.where(GrayImageWidth <255)[0][0] 
    GrayImageWidthEnd = np.where(GrayImageWidth <255)[0][-1] 
    
    GrayImageHeightStart = np.where(GrayImageHeight <255)[0][0] 
    GrayImageHeightEnd = np.where(GrayImageHeight <255)[0][-1] 
    
    #Take  Margin
    WidthLength  =  GrayImageWidthEnd - GrayImageWidthStart;
    HeightLength =  GrayImageHeightEnd - GrayImageHeightStart;
    
    #Cut area 
    WidthStartPoint = GrayImageWidthStart - round(WidthLength*Margin);
    if WidthStartPoint < 1:
        WidthStartPoint = 1

    WidthEndPoint = GrayImageWidthEnd + round(WidthLength*Margin);
    if WidthEndPoint >= len(GrayImageWidth):
        WidthEndPoint = len(GrayImageWidth)
  
    HeightStartPoint = GrayImageHeightStart - round(HeightLength*Margin)
    if HeightStartPoint < 1 :
        HeightStartPoint = 1;
    
    HeightEndPoint = GrayImageHeightEnd + round(HeightLength*Margin)
    if HeightEndPoint >= len(GrayImageHeight):
        HeightEndPoint = len(GrayImageHeight)
    
    
    #OutputImage
    OutputImageData = CutImageData[int(HeightStartPoint):int(HeightEndPoint),\
                                   int(WidthStartPoint):int(WidthEndPoint),\
                                       :]
    cv2.imwrite(tempFileName,OutputImageData)
    
    #rename File and delete tempprary file     
    shutil.copy(tempFileName,JPGFullPath)
    os.remove(tempFileName)
        

if __name__ == '__main__':
    
    # check command line
    args = sys.argv

    # Current DirPath
    CurrentDirPath = os.path.dirname(__file__)
    # get PPT file path using User Interface 
    if len(args)==1:
        file_path = UIgetPPTFilePath(CurrentDirPath)
    else:
        file_path = args[1]  
    
    # make images dir for current folder 
    ImageDirPath = makeImageDir(CurrentDirPath)
    
    # export image 
    export_img(file_path,ImageDirPath)


en conclusion

N'a pas collé la licence de sushi. Mais quelqu'un pourrait-il m'acheter un sushi?

Recommended Posts

Divisez chaque diapositive PowerPoint en un fichier JPG et exportez-le avec python
Lire le fichier json avec Python, le formater et générer le json
Créer un fichier power simple avec Python
[Python] Combiner des listes contenant des nombres en chaînes et les écrire dans un fichier de sortie
Traitement d'image avec Python (j'ai essayé de le binariser en art mosaïque 0 et 1)
J'ai créé un outil en Python qui clique avec le bouton droit sur un fichier Excel et le divise en fichiers pour chaque feuille.
Associez Python Enum à une fonction pour la rendre appelable
Sortie vers un fichier csv avec Python
Créez un fichier temporaire avec django sous forme de zip et renvoyez-le
[Python] Comment récupérer un fichier html local et le générer au format CSV à l'aide de Beautiful Soup
2.Faites un arbre de décision à partir de 0 avec Python et comprenez-le (2. Bases du programme Python)
Lire et formater des fichiers csv mélangés avec des tabulations de virgule avec des pandas Python
Un mémo contenant Python2.7 et Python3 dans CentOS
J'ai exécuté GhostScript avec python, divisé le PDF en pages et l'ai converti en image JPEG.
Un programme python qui redimensionne une vidéo et la transforme en image
Lisez le fichier CSV avec Python et convertissez-le en DataFrame tel quel
Modifier la diapositive (Powerpo pour Google) avec Python (cas RPA à faible coût avec API Google et Python)
Créez un arbre de décision à partir de 0 avec Python et comprenez-le (4. Structure des données)
Créez un arbre de décision à partir de 0 avec Python et comprenez-le (5. Entropie des informations)
J'ai créé un fichier de configuration avec Python
J'ai généré beaucoup d'images comme le favicon du calendrier Google avec Python et je l'ai incorporé dans le projet de Vue
Je veux écrire un élément dans un fichier avec numpy et le vérifier.
Création d'un système de contrôle de température avec tarte aux framboises et ESP32 (3) Réception d'un fichier Python
Comment lire un fichier CSV avec Python 2/3
Construire un environnement python avec virtualenv et direnv
Lire JSON avec Python et générer un CSV
Lancer un serveur Web avec Python et Flask
Écrivons un programme Python et exécutons-le
Créer un fichier au format Photoshop (.psd) avec python
Lire ligne par ligne à partir d'un fichier avec Python
Je veux écrire dans un fichier avec Python
Ouvrir la boîte de dialogue de fichier avec l'interface graphique Python (tkinter.filedialog)
Créer un cylindre avec une sortie de fichier open3d + STL
[Introduction au trading système] J'ai dessiné un oscillateur stochastique avec python et joué avec ♬
Créez rapidement un tableau de bord d'analyse de données Python avec Streamlit et déployez-le sur AWS
[Python] Un bloc-notes qui traduit et télécharge le fichier ipynb de GitHub en japonais.
Jusqu'à ce que vous créiez un environnement d'apprentissage automatique avec Python sur Windows 7 et que vous l'exécutiez
Il est facile d'exécuter SQL avec Python et de générer le résultat dans Excel
Collez automatiquement des images dans des matériaux Powerpo avec python + α
Procédure pour charger MNIST avec python et sortie en png
Faire de chaque page PowerPoint un fichier image en Python
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Installez le sélénium sur votre Mac et essayez-le avec python
Créez un environnement python pour chaque répertoire avec pyenv-virtualenv
Essayez de créer un jeu simple avec Python 3 et iPhone
J'ai essayé de faire LINE BOT avec Python et Heroku
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Recevoir des e-mails de Gmail et étiqueter avec Python3
[Python-pptx] Afficher les informations de police PowerPoint au format csv avec python
Exécuter un fichier Python avec une importation relative dans PyCharm
[Python] Créez un fichier de distribution pour le programme Tkinter avec cx_Freeze
Sortie d'un vidage binaire en binaire et retour dans un fichier binaire
Utilisez des programmes Python avec le plugin de sortie exec_filter de fluentd
Traduisez automatiquement DeepL en anglais avec Python et Selenium
Créer un fichier CAO 2D ".dxf" avec python [ezdxf]
[Python] Démarrez un fichier de commandes à partir de Python et passez des variables.
Utilisez des programmes Python avec le plugin de sortie exec de fluentd