Kindle漫画をダウンロードする方法【2025年度版】

Webサービス

はじめに.Kindleアプリは便利だけどサービス終了した時が不安

Amazonで購入できるKindleは便利ですよね。
購入した本はKindleアプリ内で読むことが出来ます。

Kindleで読書をしていて、こんなことを思ったりしませんか?
・画像ファイルにしてPCにダウンロードしたい。
・サービスが終わったら読めなくなるのではないか。
・インターネットに接続せずにローカル環境で読みたい。

今回の記事は上記のことを解決すべく、Kindle書籍を自身のPCにダウンロードする方法です。
正確には、Ptyhon(パイソン)で自動画面キャプチャを行い、画像ファイルとしてローカルに落とし込むことでKindleアプリ不要で読めるようになります。
画像ファイルなので当然iPhoneやAndroidといったスマホ端末からも読むことができます。(画像ファイルを見る、とも言いますが…)

1.準備

事前に以下の準備をお願いします。
・Pythonのインストール(3.7以上推奨)
※以下のURLからダウンロードしてインストールを行ってください。
https://www.python.org/downloads/

・Kindle for PC
処理を行うPCにインストールしておくこと。
処理対象となるアプリ。

・Windows OS
MacOSは不可。Windows11で試していませんが、おそらく大丈夫なはず。

・必要なPythonモジュール
Pythonインストール後に以下のコマンドをコマンドプロンプトから実行してインストールしておく。
pip install pyautogui pillow opencv-python numpy

pyautogui:マウスやキーボード操作を自動化
Pillow (PIL):スクリーンショット取得
opencv-python (cv2):画像処理・保存
numpy:画像データの配列処理
※標準ライブラリである os, datetime, tkinter, ctypes はPythonに含まれています。

2.フォルダ作成

Cドライブの直下に「Tool」フォルダを作成

3.実行ソース作成

以下のPythonソースをコピペして、C:\Toolディレクトリに「kindleForPng.py」として保存してください。

==============以下のソースをコピペして保存==================

import pyautogui as pag
import os, os.path as osp
import datetime, time
from PIL import ImageGrab
from tkinter import Tk, messagebox, simpledialog
import cv2
import numpy as np
from ctypes import *
from ctypes.wintypes import *

kindle_window_title = 'Kindle'  #Kindle for PCに含まれるウインドウタイトル
page_change_key = 'left'    #次ページに移動するときのキー
kindle_fullscreen_key = 'f11'   #フルスクリーンにするときのキー
kindle_fullscreen_wait = 5      #フルスクリーンにした後の待ち時間(秒)
waitsec = 0.30                  #キーを押してからスクリーンショットを撮る待ち時間(秒)
base_save_folder = 'C:\\Tool\\'  #保存する場所
title = str(datetime.datetime.now().strftime("%Y%m%d%H%M%S"))

EnumWindows = windll.user32.EnumWindows
GetWindowText = windll.user32.GetWindowTextW
GetWindowTextLength = windll.user32.GetWindowTextLengthW
GetWindowRect = windll.user32.GetWindowRect
SetForegroundWindow = windll.user32.SetForegroundWindow

WNDENUMPROC = WINFUNCTYPE(c_bool, POINTER(c_int), POINTER(c_int))

ghwnd = None

def EnumWindowsProc(hwnd, lParam):
    global ghwnd
    length = GetWindowTextLength(hwnd)
    buff = create_unicode_buffer(length + 1)
    GetWindowText(hwnd, buff, length + 1)
    if buff.value.find(kindle_window_title) != -1:
        ghwnd = hwnd
        return False
    return True

EnumWindows(WNDENUMPROC(EnumWindowsProc), 0)
if ghwnd == None:
    Tk().withdraw()
    messagebox.showerror("エラー", "Kindleが見つかりません")
    import sys
    sys.exit()

SetForegroundWindow(ghwnd)
rect = RECT()
GetWindowRect(ghwnd, pointer(rect))
pag.moveTo(rect.left + 60, rect.top + 10)
pag.click()
time.sleep(1)

pag.press(kindle_fullscreen_key)
sc_w, sc_h = pag.size()

# Tkインスタンスを作成して、GUIのダイアログを表示
root = Tk()
root.withdraw()  # ルートウィンドウを非表示にする

# タイトルの入力
tt = simpledialog.askstring('タイトルを入力', 'タイトルを入力して下さい(空白の場合は現在時刻)')
if tt != '':
    title = tt

# トリミングサイズの入力
l_margin = simpledialog.askinteger('トリミングサイズ入力', '左側のトリミングサイズ(ピクセル)を入力してください', minvalue=0, initialvalue=600)
r_margin = simpledialog.askinteger('トリミングサイズ入力', '右側のトリミングサイズ(ピクセル)を入力してください', minvalue=0, initialvalue=600)

pag.moveTo(sc_w - 200, sc_h - 1)
time.sleep(kindle_fullscreen_wait)

start = time.perf_counter()
img = ImageGrab.grab()
img = np.array(img)
imp = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)

# 左右のマージンを適用してトリミング
def apply_margins(img, l_margin, r_margin):
    return img[:, l_margin:-r_margin]

imp_trimmed = apply_margins(imp, l_margin, r_margin)
print(f"Trimming completed in {time.perf_counter() - start} seconds")

old = np.zeros((sc_h, imp_trimmed.shape[1], 3), np.uint8)
page = 1
cd = os.getcwd()
os.mkdir(osp.join(base_save_folder, title))
os.chdir(osp.join(base_save_folder, title))

while True:
    filename = str(page).zfill(3) + '.png'
    change = False
    start = time.perf_counter()
    while True:
        time.sleep(waitsec)
        s = ImageGrab.grab()
        s = np.array(s)
        ss = cv2.cvtColor(s, cv2.COLOR_RGB2BGR)
        ss = apply_margins(ss, l_margin, r_margin)

        if not np.array_equal(old, ss):
            break
        if time.perf_counter() - start > 5.0:
            pag.press(kindle_fullscreen_key)
            os.chdir(cd)
            import sys
            sys.exit()
    cv2.imwrite(filename, ss)
    old = ss
    print('Page:', page, ' ', ss.shape, time.perf_counter() - start, 'sec')
    page += 1
    pag.keyDown(page_change_key)

===============================================

4.Kindleアプリ起動

Kindleアプリを起動して、ダウンロードしたい書籍の1ページ目を開いておきます。

5.「kindleForPng.py」実行

「kindleForPng.py」をクリックして実行。
配置場所はデスクトップでもどこでも好きなところに置いて大丈夫です。

すると画像のようにファイル名を指定するダイアログが画面に表示されるのでフォルダ名としたい名称を入力してください。
空白の時は現在日時をフォルダ名にするようにしています。
※画面上にダイアログが表示されない場合、Alt+Tabキーを押して探してカーソルを当ててください、表示されるかと思います。

タイトルを入力、空白でもOK

続いて、左側のトリミングサイズと右側のトリミングサイズを入力します。
ここは利用者のディスプレイサイズや解像度によって変わってくるかと思いますので適宜調整をしてください。

左側のトリミングサイズ設定(ディスプレイ解像度に左右されるので各自の環境に合わせて設定する)
右側のトリミングサイズ設定(ディスプレイ解像度に左右されるので各自の環境に合わせて設定する)

そこまで設定を終えたら、Kindleアプリを前面にしてください。
ここからはマウスもキーボードも触らないで放置です。
5秒後には自動で画面キャプチャが始まり勝手にページがめくられていきます。

最後のページにたどり着くと自動的にKindleの最大化が標準サイズに戻ります。

6.画像ファイル確認

C:\Toolにアクセスすると、先ほど画面キャプチャした画像ファイルのフォルダがあります。
画像ファイルは連番になっており、並び順もそのままなので漫画でも小説でもそのまま読むことが出来ます。

iPhoneやAndroidにそのファイルを移して読書アプリなどで読むことも出来るかと思います。

それでは、良いKindleライフを~

コメント

タイトルとURLをコピーしました