🐕

『AIエディタCursor完全ガイド』(達人出版会PDF)のカラー化

2024/10/14に公開

最近『AIエディタCursor完全ガイド ―やりたいことを伝えるだけでできる新世代プログラミング―』を購入しましたが、スクリーンショット画像のコントラストが低く、読みにくい状態でした。(Cursorのデフォルトスタイルが文字のコントラストが低い上に、グレースケール化でさらにコントラストが下がっているようです。)

著者の方がAmazonのレビューで言及されているように、サポートリポジトリにカラーのスクリーンショットがアップロードされています。

確かにこちらのスクリーンショットは見やすい状態ですが、書籍と行ったり来たりするのは大変です。私は達人出版会から DRMフリーのPDF を購入したため、PDF内の画像をGitHubのスクリーンショットに差し換えるPythonスクリプトを作成しました。

https://github.com/miau/cursor-perfect-guide/tree/main/patch_tatsuzine_ebook
※スクリーンショットの参照を楽にするため、サポートリポジトリをForkして配下にディレクトリを追加しています

このスクリプトを使用することで、以下のように内容が読み取りやすくなります:

元のPDF
元のファイルの画像

差し換え後のPDF
差し換え後のファイルの画像

以下、スクリプトの概要や所感などです。

スクリプトの概要

スクリプトは以下の3つの部分から構成されています:

  1. PDFから画像を抽出する
  2. 抽出した画像とスクリーンショットをマッチングし、埋め込み用画像を準備する
  3. PDFのファイル差し換えを行う

細かい実行方法は README.md を参照いただければと思いますが、私と同一の PDF(ファイル名は「AIエディタCursor完全ガイド―やりたいことを伝えるだけでできる新世代プログラミング―-1.0.0.pdf」)をお持ちの方は 3. だけ実行すれば良いのではないかと思います。

スクリプトの詳細説明

1. PDFから画像を抽出する(01_extract_images_from_pdf.py)

PDFの各ページから埋め込まれた画像を抽出します。

補足:

  • PyMuPDFを使用しています。他のPDFライブラリ(PyPDF2、pikepdf)では正常に動作しませんでした。
    • 画像が /Separation /Black で埋め込まれているため?
  • 白黒反転された画像が出力される場合がありますが、最終的には使用されないため、そのままにしています。
  • この結果はPDF購入者以外が入手できるとまずいので、リポジトリには含めていません。

2. 画像のマッチングと準備(02_preprocess_images.py)

抽出した画像とスクリーンショットをマッチングし、埋め込み用画像を準備します。

補足:

  • スクリーンショットの一部を切り出して書籍用の画像としているようなので、PDF内の画像に対して、同一ページのスクリーンショットにOpenCVを使用してテンプレートマッチングを行い、該当領域を切り出しています。
  • 白黒反転画像にも対応するため、元画像と反転画像の両方でマッチングを行っています。
  • 画像のマッチングにPDF内の画像を使っていますが、あくまでも元画像はサポートリポジトリ内のスクリーンショットですので、この結果はリポジトリ内に含めています。
  • P.2の画像も元URLが記載されていたので併せてダウンロードしています

3. PDFのファイル差し換え(03_replace_ebook_images.py)

PDFの各ページの画像を、前処理済みの画像で差し替えます。

補足:

  • pikepdfライブラリを使用してPDFの操作を行っています。
  • 必要に応じてコントラスト調整処理を追加できます(現在はコメントアウト)。

所感

DRMフリーの電子書籍は、このような加工が可能で非常に便利です。そうは言ってもやりはじめると切りがないので普段はあまりやらないようにしているのですが、今回は発売後間もない書籍ですし、他の方々にも役立つかもしれないと思い、このスクリプトを作成しました。

このスクリプトが『AIエディタCursor完全ガイド』をより快適に読むための一助となれば幸いです。

Discussion