Möchten Sie eine PPT-Datei in JPG konvertieren und für die Dokumenterstellung verwenden? Ich habe eine Person gefunden, die an der Automatisierung arbeitet (https://qiita.com/natsutan/items/2487e24fe3f31569b40d), aber ich dachte, dass die folgenden zwei Punkte nicht ausreichen.
Aus diesem Grund habe ich basierend auf dem Namen des Folientitels von PPT eine Software erstellt, die jede Seite als JPG-Datei ausgibt.
Wie viele Ränder sollten der Gesamtbreite mit Rand in der Datei zugewiesen werden? Mit whiteSpaceCutRatio können Sie festlegen, wie viel Prozent von oben geschnitten werden sollen (für den Titelschnitt). Bitte passen Sie es an Ihre Umgebung an.
Margin = 0.1; #Spanne
whiteSpaceCutRatio = 0.2; #Wie viel Prozent der oben genannten sollten gekürzt werden? Für jede PPT-Datei angepasst
Wenn Sie eine Batchdatei durch Doppelklicken erstellen möchten, erstellen Sie eine Batchdatei wie die folgende. Sie können ein Bild aus PowerPoint generieren, indem Sie doppelklicken, ohne die Benutzeroberfläche zu durchlaufen.
Erklärung der Batchdatei
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"
OpenCV cv2.imread kann keine japanischen Dateinamen lesen. Also, in dieser Quelle, einmal in hogehogefugaFuga.jpg konvertiert und mit Opencv verarbeitet Auf den ursprünglichen Namen zurückgesetzt (Referenz: https://qiita.com/SKYS/items/cbde3775e2143cad7455) .. Japanisch nervt mit Python. Und danke an die Person, die den Artikel geschrieben hat
# -*- 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:
#Wenn Sie diese Datei in einem Ordnerpfad verwenden, der Japan enthält
#Funktioniert nicht richtig
#
# GlobalSetting Change here
Margin = 0.1; #Spanne
whiteSpaceCutRatio = 0.2; #Wie viel Prozent der oben genannten sollten gekürzt werden? Für jede PPT-Datei angepasst
# Select PowerpointFile and get Absolute path
def UIgetPPTFilePath(CurrentDirPath):
root = tk.Tk()
root.withdraw()
typ = [('PPT-Datei','*.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)
Die Sushi-Lizenz wurde nicht eingefügt. Aber könnte mir jemand ein Sushi kaufen?
Recommended Posts