0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Googleスライドをフルハイビジョンサイズで画像切り出し

Posted at

概要

YouTube用の動画を作成しているが、説明に使う予定のGoogleスライドを画像で保存したら、フルHDサイズ(1920×1080)ではなかった。
リサイズも面倒なので、PDFでダウンロードしてJPEG変換し、トリミングして画像を作成するようにした。

環境

Windows 10 Professional
Python 3.9.2

準備

pdf2imageのインストール

ライブラリ「pdf2image」をインストールする

pip install pdf2image

Popplerのダウンロード

フリーのPDFコマンドラインツールである「Poppler」をインストールする。

Poppler for windows

リンク先中央付近の「Latest binary : poppler-0.??.0_x86」をダウンロードする。

フォルダ構成

フォルダ構成は下記の通り。

PdfToImage/
 ├ image_file/
 ├ pdf_file/
 │ └ slide.pdf
 ├ poppler/
 │ ├ local/
 │ ├ include/
 │ ├ lib/
 │ └ share/
 └ .pyファイル(実行ファイル)

popplerフォルダにダウンロードしたPoppplerのファイルを解凍してそのまま入れる。

ソースコード

import os
from pathlib import Path
from pdf2image import convert_from_path
import sys
from PIL import Image

# poppler/binを環境変数PATHに追加する
poppler_dir = Path('__file__').parent.absolute() / "poppler/bin"
os.environ["PATH"] += os.pathsep + str(poppler_dir)

# PDFファイルのパス
pdf_path = Path("./pdf_file/slide.pdf")

# PDF -> Image に変換(200dpi)
pages = convert_from_path(str(pdf_path), 200)

# 画像ファイルを1ページずつ保存
image_dir = Path("./image_file")
for i, page in enumerate(pages):
    file_name = pdf_path.stem + "_{:02d}".format(i + 1) + ".jpeg"
    image_path = image_dir / file_name
    # JPEGで保存
    page.save(str(image_path), "JPEG")

#トリミング前の画像の格納先
ORIGINAL_FILE_DIR = "./image_file/"
#トリミング後の画像の格納先
TRIMMED_FILE_DIR = "./cut_file/"

#画像パスと、左上座標、右下座標を指定して、トリミングされたimageオブジェクトを返す。
def trim(path, left, top, right, bottom):
  im = Image.open(path)
  im_trimmed = im.crop((left,top,right,bottom))
  return im_trimmed

if __name__ == '__main__':
  #もしトリミング後の画像の格納先が存在しなければ作る
  if os.path.isdir(TRIMMED_FILE_DIR) == False:
    os.makedirs(TRIMMED_FILE_DIR)

  #トリミングする左上の座標
  left, top = 62, 24
  #トリミングする右上の座標
  right, bottom = 1982, 1104

  #画像ファイル名を取得
  files = os.listdir(ORIGINAL_FILE_DIR)
  #特定の拡張子のファイルだけを採用。実際に加工するファイルの拡張子に合わせる
  #files = [name for name in files if name.split(".")[-1] in ["png","jpg"]]

  for val in files:
    #オリジナル画像へのパス
    path = ORIGINAL_FILE_DIR + val
    #トリミングされたimageオブジェクトを取得
    im_trimmed = trim(path, left, top, right, bottom)
    #トリミング後のディレクトリに保存。ファイル名の頭に"cut_"をつけている
    im_trimmed.save(TRIMMED_FILE_DIR+"cut_"+val, quality=95) #qualityは95より大きい値は推奨されていないらしい

実行すると、「cut_file」というフォルダが作られ、その中に"cut_slide_**.jpeg"というトリミングした画像が格納される。

#参考
PDFからJPEG画像の取得
PythonでPDFを画像ファイル(JPEG、PNG)に変換する方法
JPEGのトリミング
画像を一括でトリミング【python】【Pillow】
name ‘__file__’ is not definedの解決
Python NameError: name ‘file’ is not definedのエラー
記事を書くときの参考
ディレクトリ構成図を書くときに便利な記号

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?