以前の記事でキンドル書籍をダウンロードしてローカルで読む方法を紹介しました。
Kindle漫画をダウンロードする方法【2025年度版】(以前の記事)
https://yuqyuq.com/yuqyuq/?p=1905
今回はここで紹介した方法を応用して左開き、左綴りの書籍にも対応したものを紹介します。
この方法を利用すればAmazonで購入したKindle本をKindleアプリを利用せずにPCやスマホ等のローカル環境で読むことが出来るようになりました。
※仕組みとしてはKindleを1ページずつ画面キャプチャして画像ファイルとして閲覧する、というだけですが(笑)
1.準備
以下の記事を読んで、以下の環境を準備してください。
・Pythonのインストール
・Kindle for PC
・Windows OS
・必要なPythonモジュール
参考記事:https://yuqyuq.com/yuqyuq/?p=1905
2.フォルダ作成
Cドライブの直下に「Tool」フォルダを作成
3.実行ソース作成
以下のPythonソースをコピペして、C:\Toolディレクトリに「kindleForPng_Left.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 = 'right' #次ページに移動するときのキー
kindle_fullscreen_key = 'f11' #フルスクリーンにするときのキー
kindle_fullscreen_wait = 5 #フルスクリーンにした後の待ち時間(秒)
waitsec = 0.30 #キーを押してからスクリーンショットを撮る待ち時間(秒)
base_save_folder = 'D:\\99_Temp\\book\\' #保存する場所
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_Left.py」実行
「kindleForPng_Left.py」をクリックして実行。
配置場所はどこでも大丈夫かと思いますが「C:\Tool」に配置するのを推奨します。
下記の記事と同じようなダイアログが表示されるので、同じように操作を行ってください。
https://yuqyuq.com/yuqyuq/?p=1905
実行すると自動的にKindleが自動的にページ遷移しながら画面キャプチャされて画像ファイルが出来上がるかと思います。
6.画像ファイル確認
「kindleForPng_Left.py」を配置したディレクトリ(C:\Tool)にアクセスすると、先ほど画面キャプチャした画像ファイルのフォルダがあります。
画像ファイルは連番になっており、並び順もそのままなので漫画でも小説でもそのまま読むことが出来ます。
PCであれば画像ファイルでそのまま読めるかと思いますし、iPhoneやAndroidにそのファイルを移して読書アプリなどで読むことも出来るかと思います。
こうして画面キャプチャして画像にすることでKindleを介さずにローカル環境で読むことができます!
コメント