Skip to content

ppxbpfiles/JisuiArc2PDF

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JisuiArc2PDF.ps1

コマンドラインが苦手な方は、こちらの詳細なガイドをご覧ください: 使い方ガイド.md

複数の画像書庫ファイルを、画像の並び順を維持したまま高品質なPDFに変換するPowerShellスクリプトです。 7-zipで解凍できる形式の書庫(ZIP, RARなど)をサポートしており、本をスキャンしてアーカイブ形式でまとめた自炊書籍をPDFに変換することを想定しています。

概要

このスクリプトは、ワイルドカードパターン(例: *.zip)で指定された複数の書庫ファイルを個別に処理し、それぞれを一つのPDFファイルに変換します。アーカイブ内の画像ファイルを自然順(例: 1.jpg, 2.jpg, 10.jpg)に並べ替え、元のアーカイブと同じ名前のPDFを生成します。 7-zipで解凍できる形式の書庫(ZIP, RARなど)をサポートしています。

注意事項

  • ファイルの上書き: 出力先に同名のPDFファイルが既に存在する場合、スクリプトはユーザーに確認することなく、そのファイルを上書きします。 重要なファイルを誤って上書きしないように、事前に出力先フォルダをご確認ください。

主な機能

  • ワイルドカードによる複数ファイルの指定: *.zip のようなワイルドカードパターンを指定して、複数の書庫ファイルを一度に処理できます。
  • 堅牢なパス解決: スクリプト内部でワイルドカードを展開するため、シェルの挙動に依存せず安定して動作します。
  • 多様な画像形式に対応: ImageMagickが認識できるすべての画像形式をサポートします。
  • 画像ファイルの自動選別: 書庫内のファイルをImageMagickで順に識別し、画像として認識されたファイルのみを処理対象とし、画像以外のファイル(テキストファイルなど)は自動的に無視されます
  • インテリジェントな画像変換: 画像の変換は、おおよそ以下の順序で行われます。各工程はオプションで有効/無効を切り替えられます。 [元画像]傾き補正余白除去リサイズコントラスト/色調補正[変換後画像]
    • 画像の彩度を自動で判別し、カラー画像とグレースケール画像をそれぞれ最適に処理します。
    • 画像はPDF化に適したサイズと解像度にリサイズされます。デフォルトでは**A4サイズ・144dpi相当(高さ1683px)**に設定されており、細かくカスタマイズ可能です。
    • インテリジェントなリサイズ: 変換後の目標サイズ(-Height-PaperSize で指定)よりも縦ピクセルが元々小さい画像は、画質の劣化を防ぐためにリサイズされません。そのままの解像度でPDFに変換されます。
  • 最適なファイルサイズの自動選択(2段階比較): 画質とファイルサイズのバランスを取るため、以下の2段階の比較処理を自動で行います。
    1. ステップ1: ピクセルサイズの比較(個別リサイズ)
      • まず、書庫内の画像1枚ごとに、設定された目標の高さ(例: 2000px)と画像の実際の高さを比較します。
      • 画像が目標より大きい場合のみ、目標の高さに縮小されます。これにより、不必要な画質の劣化(アップスケール)を防ぎます。
      • この処理を経た画像群が「変換後ファイル」として一時的に保存されます。
    2. ステップ2: 合計ファイルサイズの比較(一括選択)
      • 次に、「元の全画像」の合計ファイルサイズと、「変換後の全画像」の合計ファイルサイズを比較します。
      • 比較の結果、「変換後」のファイルセットを採用するか、「元」のファイルセットを採用するかが決まります。(この判断は -TotalCompressionThreshold オプションで制御できます)
      • 重要: 「元」のファイルセットを採用すると判断された場合でも、元のファイルがそのまま使われるわけではありません。この場合、元のファイル(例: WEBP, PNG, AVIF)はリサイズされずにJPEG形式へ変換されます。その際、通常の変換処理と同様に彩度チェックが行われ、グレースケールと判断された画像はグレースケール化されます。 これにより、PDF非対応の形式が処理できるだけでなく、画質を維持しつつファイルサイズも最適化されます。
        • 【補足】なぜ既に白黒の画像もグレースケール化するのか? このパススルー処理では、元々グレースケールだった画像に対しても、改めてグレースケール化の指示が出されます。これは意図された動作で、元のファイルが「カラー形式だが中身は白黒」のような場合でも、確実にファイルサイズが最適な「グレースケール形式のJPEG」として出力するための正規化処理です。既にグレースケールの画像にこの処理を行っても、画質が劣化することはありません。 この「すべて変換するか、すべて元のままか」という一括判断により、一部の画像だけが圧縮されて画質が不均一になることを防ぎ、全体として最もファイルサイズが小さくなる選択が保証されます。
  • PDFの最適化とビューア設定:
    • pdfcpu を使用して、PDFの最適化とビューア設定(ドキュメントタイトルの表示など)を自動で行います。
  • ログ機能: 変換が成功するたびに、使用した設定を JisuiArc2PDF_log.txt に自動で記録します。これにより、後からどのファイルがどの設定で変換されたかを確認できます。
  • 堅牢な自然順ソート: ファイル名に含まれる数字を数値として正しく認識するのはもちろん、_@ といった一般的な記号を無視して並べ替えるため、page_10.jpg の前に page_2.jpg が来るような、直感的で正しいページ順序を維持します。
  • タイムスタンプの維持: 生成されるPDFの作成日時と更新日時を、元のアーカイブファイルのものと一致させます。
  • 傾きの自動補正: -Deskew オプションにより、スキャン時に生じた画像のわずかな傾きを自動で検出・補正します。
  • クリーンアップ: 処理中に使用した一時ファイルは自動的に削除されます。

前提条件

PowerShell バージョン

このスクリプトは、現代的なPowerShellの構文や機能に依存しているため、PowerShell 7.0 以上 (pwsh.exe) の実行環境を推奨します。

  • Windows: PowerShell 7 をインストールしてください。pwsh.exe でスクリプトを実行する必要があります。
  • Linux / macOS: PowerShell 7.0以上がインストールされていれば動作する可能性があります。

動作確認について このスクリプトはクロスプラットフォームでの動作を意図して作られていますが、開発者による動作確認はWindows環境でのみ行われています。LinuxやmacOSでの動作は保証されていませんので、ご了承ください。

お使いのPowerShellのバージョンは、pwsh -c "$PSVersionTable.PSVersion" を実行することで確認できます。Windowsに標準搭載の powershell.exe (バージョン5.1) では動作しないためご注意ください。

必要なソフトウェア

このスクリプトを実行するには、以下のソフトウェアがインストールされている必要があります。

  • ImageMagick: 画像処理(リサイズ、品質調整、色空間変換)に使用します。
    • magick.exe が必要です。
  • 7-Zip: アーカイブファイルの展開に使用します。
    • 7z.exe と、それが動作するために必要な 7z.dll が必要です。これらは通常、7-Zipをインストールしたフォルダに一緒に配置されています。
  • PDFCPU: 画像ファイルからPDFを生成・最適化するために使用します。
    • pdfcpu.exe が必要です。
  • QPDF (オプション): PDFのリニアライズ(Fast Web View、Web表示用に最適化)処理に使用されます。
    • qpdf.exe と、バージョンに応じた関連DLLファイル(例: qpdf30.dll)が必要です。QPDFはスクリプトと同じフォルダに配置するか、環境変数PATHに登録されている必要があります。

これらのソフトウェアは、以下のいずれかの方法で利用可能にしてください。

  • 方法1 (推奨: ポータブル実行): スクリプトと同じフォルダに必要な実行ファイルを配置します。PC環境に依存せず、このフォルダだけで完結するのが利点です。
    • ImageMagick: 公式サイトから static 版 (...-static-x64.zipなど) をダウンロードしてください。magick.exe という単一のファイルで動作し、DLLは不要なため最もシンプルです。
    • 7-Zip: 7z.exe7z.dll を配置します。
    • PDFCPU: pdfcpu.exe を配置します。
    • QPDF (任意): -Linearize機能を使う場合は qpdf.exe と関連DLLを配置します。
  • 方法2 (インストールして使用): 各ソフトウェアをPCにインストールし、実行ファイルへのPATHを通します。
    • コマンドプロンプトやPowerShellで magick -version, 7z, pdfcpu version を実行して、それぞれのバージョン情報が表示されれば、正しくPATHが通っています。(7zは引数なしで実行します)

設定

スクリプト実行時にオプションの引数を指定することで、画質や解像度を細かく制御できます。指定しない場合は、カッコ内のデフォルト値が使用されます。

解像度設定

変換される画像の縦方向の解像度(ピクセル数)を制御します。以下のいずれかの方法で指定できます。

  • -Height <整数> (エイリアス: -h) 画像の高さをピクセル単位で直接指定します。

  • -Dpi <整数> (エイリアス: -d) および -PaperSize <文字列> (エイリアス: -p) 画像のDPI(Dots Per Inch)と用紙サイズを指定します。-Dpi-PaperSize同時に指定 する必要があります。

    • -PaperSize で指定可能な値: A0, A1, A2, A3, A4, A5, A6, A7, B0, B1, B2, B3, B4, B5, B6, B7
    • 例: .\JisuiArc2PDF.ps1 *.zip -p B5 -d 300

優先順位とデフォルトの挙動:

  1. -Height が指定された場合、その値が最優先されます。
  2. -Dpi-PaperSize が両方指定された場合、それらの値から高さが自動計算されます。
  3. 何も指定されない場合、A4サイズ・144dpi相当(高さ1683px) がデフォルト値として使用されます。

注意:

  • -Dpi または -PaperSize のみを指定した場合、エラーが発生します。両方を指定するか、またはどちらも指定しないでください。

【ヒント】最適な解像度の選び方

  • デフォルト設定(144dpi)はほとんどの用途で最適です

    • このスクリプトの主な目的は「デジタル端末の画面で読む」ことです。144dpi(A4で高さ約1680px)は、一般的なPCモニターやタブレットで快適に読める画質と、大きすぎないファイルサイズを両立できる、非常にバランスの取れた設定です。特にこだわりがなければ、まずはデフォルトのままお試しください。
  • 4Kモニターなど高精細ディスプレイの場合

    • 4K(縦2160px)のような高精細モニターで全画面表示すると、144dpiの画像は少し引き伸ばされるため、文字の輪郭が甘く感じられる(粗さが目立つ)ことがあります。
    • 最高の画質を求める場合は、高さを2200px〜2400px程度に設定するのがおすすめです。-h 2200 のように直接指定するのが簡単です。
    • pwsh -File .\JisuiArc2PDF.ps1 *.zip -h 2200
  • 印刷が目的の場合

    • もしPDFを印刷する可能性があるなら、300dpi-d 300)を基準に設定してください。これが商業印刷でも使われる標準的な解像度です。

使用例:

# 高さを2000pxに直接指定
pwsh -File .\JisuiArc2PDF.ps1 *.zip -h 2000

# B5サイズ、300dpiで高さを自動計算
pwsh -File .\JisuiArc2PDF.ps1 *.zip -p B5 -d 300

【ヒント】解像度とページサイズの関係について

-PaperSize-SetPageSizeを設定すると、画像の解像度は変わるの?」という疑問について。

このスクリプトの画像処理は、大きく分けて2段階で行われます。

  1. ステップ1: 画像のリサイズ (ImageMagick)

    • まず、-Height-PaperSizeの設定に基づいて、画像のピクセル数が変更されます(例: 3000x4000ピクセル → 1200x1600ピクセル)。
    • この時点で、画像の「解像度(ピクセル数)」は確定します。
  2. ステップ2: PDFページの作成 (pdfcpu)

    • 次に、pdfcpuが、ステップ1で作成された画像ファイルを受け取ります。
    • -SetPageSizeを指定してf:A4のような設定を渡すと、pdfcpuは「A4サイズ(210mm x 297mm)の白紙のページ」を用意し、その上にステップ1の画像を配置します。

つまり、-SetPageSizeは画像のピクセルを直接変更するわけではなく、「どの大きさの紙に画像を配置するか」を決めるだけの設定です。画像の最終的な精細さ(DPI)は、ステップ1のリサイズ設定(-Height-Dpi)によって決まります。

画質と圧縮制御の設定

  • -Quality <整数> (エイリアス: -q) PDFに変換される際の中間JPEG画像の品質を決定します。1 から 100 の範囲で指定します。(デフォルト: 85

    • 値を大きくすると画質が向上しますが、ファイルサイズも増加します。
    • 値を小さくするとファイルサイズを削減できますが、画質は低下します。
    • 画質の詳しい設定については、こちらの記事が参考になります: ImageMagick の -quality オプションの挙動と画質の関係
  • -SaturationThreshold <小数> (エイリアス: -s, -sat) 画像をグレースケールと判断する彩度のしきい値です。(デフォルト: 0.05

  • -TotalCompressionThreshold <パーセント> (エイリアス: -tcr) **変換後の画像セットを採用する判断基準となる圧縮率(%)**を指定します。0から100の間の小数が指定できます。

    動作の仕組み:

    1. スクリプトは、まず全ての画像をリサイズ・再圧縮し、「変換後ファイルセット」を作成します。
    2. 次に、「変換後ファイルセット」の合計サイズが、「元ファイルセット」の合計サイズの何パーセントになったかを計算します。
    3. 計算されたパーセンテージが、このオプションで指定した値(例: 95)を下回った場合のみ、変換後のファイルセットが採用されます。
    4. 下回らなかった場合(十分に圧縮できなかった場合)、変換は破棄され、元のファイルセットがPDF互換のJPEG形式に変換された上で使われます

    ユースケース:

    • ファイルサイズがほんのわずか(例: 98%や99%)しか減らない場合に、再圧縮による画質劣化を避けて、元画像の品質を維持したい場合などに有効です。
    • このオプションを指定しない場合、デフォルトの動作として、変換後の合計サイズが元の合計サイズの102%未満であれば(つまり、サイズが2%以上増加していなければ)変換後のファイルが採用されます。これにより、変換によってごくわずかにサイズが増加した場合でも、リサイズや色調補正といった変換のメリットを享受できます。

    【補足】-Quality-TotalCompressionThresholdの関係

    -Qualityで品質を決めているのに、なぜさらに-tcrでファイルサイズを比較する必要があるの?」という疑問は、JPEGの仕組みを理解する上で非常に重要です。

    結論から言うと、-Quality 85 のような設定は「元の品質やファイルサイズのXX%にする」という相対的な指定ではないからです。これは、新しく作成するJPEGファイルが満たすべき絶対的な品質目標です。

    スクリプトは、元の画像(PNGでもJPEGでも)を一度ピクセルデータに展開し、リサイズなどの処理を行った後、そのピクセルデータを全く新しいJPEGとして、指定された品質目標(例: 85)でゼロから作成し直します。

    このため、元の画像データによって結果が大きく変わります。

    • 元がPNG(情報量が多い): 品質85で圧縮すれば、ファイルサイズは劇的に小さくなります。
    • 元が既に品質88のJPEG(情報量が少ない): 品質85で再圧縮しても、削れるデータが少ないため、ファイルサイズはあまり変わりません。

    この「あまり変わらない」状況で、再圧縮による画質劣化だけを被るのを防ぐための安全装置が -TotalCompressionThreshold です。-Qualityで品質のレシピを決め、-tcrで「そのレシピで再調理する価値があるか?」を最終判断する、という2段構えになっています。

    【補足2】JPEGを再圧縮し続けるとどうなるか (世代損失)

    「同じ品質設定で何度も再圧縮したら、ファイルサイズはどうなるの?」という疑問について。

    結論から言うと、ファイルサイズはある一定のサイズに収束し、それ以上減らなくなります(サチュレートします)。

    しかし、ここで最も重要なのは、ファイルサイズが下げ止まっても、画質は再圧縮のたびに劣化し続けるという点です。JPEGは保存するたびに情報が失われる非可逆圧縮であり、この繰り返しの劣化を「世代損失 (Generation Loss)」と呼びます。

    このため、-tcr-sc といったオプションは、この不要な世代損失を避け、画質を維持するための重要な役割を担っています。

  • -SkipCompression (エイリアス: -sc) このスイッチを指定すると、リサイズ、品質再設定、傾き補正、余白除去、コントラスト調整など、ファイルの内容を変更する可能性のある最適化処理をすべてスキップし、元画像の品質を最大限維持します。

    このオプション使用時の動作は、元のファイル形式によって異なります。

    • 元ファイルがJPEGの場合: 完全に無加工のまま、ファイルがそのままPDF化の対象となります。再圧縮も行われません。
    • 元ファイルがJPEG以外 (PNG, WEBPなど) の場合: PDFとの互換性を確保するため、JPEG形式への変換のみが行われます。その際、品質の劣化を最小限に抑えるように変換されます。

    このオプションは、「再圧縮による画質劣化を完全に避けたい」「元画像のピクセルパーフェクトな状態を保ったままPDFにしたい」といった場合に最適です。-Height-Quality-Deskew などの設定はすべて無視されます。

使用例:

# 短いエイリアスを使い、品質を95に設定して実行
pwsh -File .\JisuiArc2PDF.ps1 "MyBook.zip" -q 95

# 品質と圧縮率しきい値の両方を指定
pwsh -File .\JisuiArc2PDF.ps1 "MyBook.zip" -Quality 92 -TotalCompressionThreshold 95

余白除去の設定

  • -Trim このスイッチを指定すると、画像変換処理の前に、ImageMagickの-trim機能を使って画像の周囲にある余白(単一色の背景)を自動的に除去します。

    • 本の見開きをスキャンした際に生じる中央の黒い線や、スキャナの縁の影などを除去するのにも役立ちます。
  • -Fuzz <文字列> -Trim機能が「同じ色」と見なす色の許容範囲を指定します。デフォルトは 1% です。

    • 完全に真っ白ではない背景(例: 少し黄ばんだ紙)や、スキャン時にできた薄い影、JPEG圧縮によるノイズなどを余白として除去したい場合に、この値を調整します。
    • 値を大きくすると、より多くの色が「背景色」と見なされます。
    • 設定値の目安:
      • 1% (デフォルト): スキャン品質が良く、背景が均一な白色の場合に最適です。
      • 3%~7%: 少し黄ばんだ紙や、薄い影を余白として除去したい場合に試してみてください。一般的なケースではこの範囲で十分なことが多いです。
      • 8%~15%: 余白の影が濃い、または背景の照明が不均一な場合に試す価値がありますが、画像本体の色が薄い部分まで除去してしまう危険性が高まります。
    • 注意: 高い値を設定する場合は、まず1つの書庫だけで試してみて、意図しない部分が消えていないか確認することをお勧めします。

傾き自動補正

  • -Deskew (エイリアス: -ds) このスイッチを指定すると、ImageMagickの-deskew機能を使って、画像の傾きを自動的に検出して補正します。
    • スキャンした際に発生したページの傾きを補正し、まっすぐにします。
    • 内部的に 40% のしきい値を使用しており、ほとんどのケースで良好に機能します。

見開きページの分割設定

  • -SplitPages (エイリアス: -sp) このスイッチを指定すると、横長の画像(幅が高さの1.2倍より大きいもの)を自動的に「見開きページ」と判断し、中央で2つの単一ページに分割します。

    • 雑誌や単行本を見開きの状態でスキャンした場合に、それを個別のページに分けるのに非常に便利です。
  • -Binding <文字列> (エイリアス: -b) -SplitPages と一緒に使用し、本の綴じ方向を指定します。これにより、分割後のページの順序が決まります。デフォルトは Right です。

    • Right (デフォルト): 右綴じ。日本の漫画や小説のように、右側のページから左側のページへ読み進める形式です。分割後は「右ページ」→「左ページ」の順でPDFに格納されます。
    • Left: 左綴じ。洋書や技術書のように、左側のページから右側のページへ読み進める形式です。分割後は「左ページ」→「右ページ」の順でPDFに格納されます。

コントラスト・紙焼け調整

スクリプトはカラーページと白黒ページを自動で判別し、それぞれに最適なコントラスト調整を適用できます。

  • -AutoContrast (エイリアス: -ac) カラーページのコントラストを自動で最適化します。ImageMagickの-normalize機能を使用し、画像の明るさの範囲を最大化(いわゆる「レベル補正の自動調整」)します。

    • 古いスキャンで全体的に暗くなってしまったカラーページや、色褪せたページの色を鮮やかに復元するのに役立ちます。
    • このスイッチを指定すると、手動調整の-ColorContrastオプションは無視されます。
    • 【ヒント】-AutoContrast (-normalize) と -equalize の違い: ImageMagickにはコントラストを調整する機能として-equalizeもありますが、自炊画像には-normalizeを使用する本オプションが最適です。
      • -normalize (本スクリプトで採用): 画像全体の明るさの最大と最小を基準にコントラストを補正します。スキャンで失われがちな「背景の白さ」と「文字の黒さ」を復元し、自然で読みやすい結果になります。
      • -equalize: 明るさの分布を平坦化するため、画像の大部分を占める「白い背景」がまだらなグレーになってしまい、かえって読みにくくなることがほとんどです。そのため、自炊画像の処理には適していません。
  • -GrayscaleLevel <文字列> (エイリアス: -gl) グレースケール(白黒)ページに適用されるコントラスト調整です。ImageMagickの-level機能を使い、紙焼け(背景の黄ばみ)除去に効果的です。

    • 10%,90% のように、黒点と白点をパーセンテージで指定します。この例では、最も暗い10%を黒に、最も明るい10%を白にマッピングします。
    • 適用タイミング: この補正は、画像の傾き補正やリサイズなど、他の処理が行われた後、最終的なJPEGとして書き出される直前に適用されます。ファイルサイズ比較の結果、リサイズされなかった元の画像が使われる場合でも、グレースケールと判定されればこの補正は有効になります。
    • 【補足】なぜグレースケール化の後に補正するのか?: このオプションは、グレースケール変換とレベル補正をセットで行います。まず画像を白黒に変換すると、紙の黄ばみは「薄いグレー」の背景になります。その直後にレベル補正を適用し、その「薄いグレー」を強制的に「真っ白」に、文字の「濃いグレー」を「真っ黒」に引き伸ばします。この順番で処理することで、紙焼けが除去されたようなコントラストの高い、読みやすい白黒ページが作成されます。
  • -ColorContrast <文字列> (エイリアス: -cc) カラーページに適用されるコントラストを手動で調整します。ImageMagickの-brightness-contrast機能を使います。

    • -AutoContrastが指定されていない場合のみ有効です。
    • 0x25 のように、明るさxコントラストをパーセントで指定します。この例では、明るさを0%(変更なし)、コントラストを25%上げます。
    • 少し明るくしつつコントラストを上げる場合は 5x20 のように指定します。

PDF出力設定

  • -SetPageSize このスイッチを指定すると、-PaperSizeで設定された用紙サイズ(例: A4, B5)が、PDFのページの物理的なサイズとして明示的に設定されます。デフォルト(無指定)では、pdfcpuが画像サイズに合わせてページサイズを自動決定するため、最も安定して動作します。

  • -Landscape -SetPageSizeスイッチと同時に使用した場合に、ページを横向き(Landscape)に設定します。(例: f:A4L

PDFのウェブ最適化設定

  • -Linearize (エイリアス: -lin) このスイッチを指定すると、生成されたPDFを「リニアライズ(Fast Web View、Web表示用に最適化)」します。
    • 重要: この機能を使用するには、QPDF (qpdf.exe) が必須です。 スクリプトと同じフォルダに配置するか、環境変数PATHを通して利用可能にしてください。QPDFが見つからない場合、このオプションは無視され、警告メッセージが表示されます。
    • リニアライズされたPDFは、「高速なウェブ表示(Fast Web View)」が有効になり、ウェブブラウザで表示する際に、ファイルのダウンロードが完了する前に最初のページから順番に表示できるようになるため、大きなPDFファイルの閲覧体験が向上します。
    • 注意: リニアライズされたPDFは、一部の古いPDFビューアや特殊な処理系では正しく読み取れない場合があります。主にローカルまたは内部ネットワークでの利用を想定している場合、または互換性が重要な場合は、このオプションを有効にしないことをお勧めします。

ログと出力の設定

  • -LogPath <パス> ログファイルの出力先を指定します。パスは、ファイル名を含む完全なパス、またはログファイルを保存したいディレクトリのパスのいずれかを指定できます。
    • ディレクトリを指定した場合: JisuiArc2PDF_log.txt という名前のログファイルがそのディレクトリ内に作成されます。
    • フルパスを指定した場合: 指定されたパスにログファイルが作成されます。
    • 指定しない場合: スクリプトと同じフォルダに JisuiArc2PDF_log.txt が作成されます。

-SaturationThreshold の詳細

このスクリプトは、画像1枚ごとの「平均彩度」を計算し、その値がここで設定したしきい値(Threshold)より低いかどうかで、カラー画像かグレースケール画像かを判断します。

  • 彩度とは?

    • 色の鮮やかさ・純粋さの度合いです。
    • 彩度が0の場合、その色は白、黒、または灰色になります。
  • しきい値の役割

    • ImageMagickは画像の平均彩度を 0 (完全な無彩色) から 1 (最も鮮やか) までの数値で計算します。
    • -SaturationThreshold は、その判断の境界線となる値です。
    • 平均彩度 < 0.05 ならば、グレースケールとして処理されます。
  • なぜ 0 ではないのか?

    • スキャンした書籍の白いページは、完全に真っ白(彩度0)ではなく、わずかに色味を帯びている (例: 黄ばみ、インクのにじみ) ことがよくあります。
    • しきい値を0にすると、こうした微妙な色味のせいで「カラー画像」と誤判定され、ファイルサイズが不必要に大きくなる可能性があります。
    • 0.05 という値は、そうした微細な色ノイズを「誤差」とみなし、実質的に白黒のページを正しくグレースケールとして扱うための経験的な値です。
  • この値を変更するケース

    • ケース1: カラーの挿絵やマーカーがグレースケールに変換されてしまう場合
      • この値を少し下げてみてください (例: 0.03)。しきい値が下がることで、より低い彩度でもカラーとして認識されるようになります。
    • ケース2: わずかな色味もカラーとして保持したい、またはグレースケールへの変換をより厳密にしたい場合
      • この値を下げてください (例: 0.01)

通常は、デフォルトの 0.05 のままで問題ありません。

詳細メッセージの表示

スクリプトの動作を詳しく確認したい場合や、問題が発生したときに原因を特定したい場合は、-Verbose オプションを指定してください。

使用例:

# 詳細メッセージを表示しながら処理
pwsh -File .\JisuiArc2PDF.ps1 *.zip -Verbose

使用方法

対話モードでの実行(簡単・推奨)

コマンドラインの操作に不慣れな場合や、オプションを毎回指定するのが面倒な場合は、対話モードが便利です。

スクリプトを-Qualityなどの詳細なオプションを付けずに実行すると、自動的に対話モードが始まります。

対話モードの開始方法:

  • 処理対象のファイルを指定して起動

    • 単一のファイルを指定

      # 特定の書庫ファイルを指定して対話モードを開始
      pwsh -File .\JisuiArc2PDF.ps1 "MyBook.zip"
    • ワイルドカードで複数ファイルを指定

      # 現在のフォルダにあるすべての.rarファイルを対象に対話モードを開始
      pwsh -File .\JisuiArc2PDF.ps1 *.rar
  • スクリプトだけを起動(後からパスを入力)

    pwsh -File .\JisuiArc2PDF.ps1

対話モードの流れ

  1. 実行すると、まず変換設定に関する質問が順番に表示されます。
    • 圧縮をスキップしますか (y/n)? [n]
    • 品質 (1-100) [85]
    • 傾き補正 (y/n)? [n]
    • ...など
  2. 角括弧 [ ] 内に表示されているのはデフォルト値です。その設定でよければ、何も入力せずに Enter キーを押してください。
  3. 値を変更したい場合は、希望の値を入力して Enter キーを押します。
  4. すべての設定が完了すると、処理が開始されます。

このモードを使えば、たくさんのオプションを覚える必要がなく、簡単に変換を実行できます。

コマンドラインでの実行(詳細設定)

全てのオプションを自分で指定して実行したい場合は、-Quality-Heightなどの引数をコマンドラインから渡します。ファイル名にスペースや日本語などの特殊文字が含まれる場合は、パスをシングルクォート ' またはダブルクォート " で囲んでください。

オプションを指定して実行した場合、スクリプトは対話モードにならず、指定された設定で直接処理を開始します。

例: 非対話モードでの実行

  • 単一のファイルを指定

    # 特定の書庫ファイルを、B5サイズ/300dpiに設定して処理
    pwsh -File .\JisuiArc2PDF.ps1 "MyBook.zip" -PaperSize B5 -Dpi 300
  • ワイルドカードで複数ファイルを指定

    # 品質を90、高さを2000pxに指定して、全ての.rarファイルを処理
    pwsh -File .\JisuiArc2PDF.ps1 *.rar -Quality 90 -Height 2000

総合的な使用例

複数のオプションを組み合わせて、より細かく変換プロセスを制御することができます。

使用例1: 高画質・高圧縮、全自動補正(推奨設定)

画質を維持しつつ、可能な限りの補正と圧縮をバランス良く行う、最も標準的で推奨される設定です。

pwsh -File .\JisuiArc2PDF.ps1 "C:\Scans\*.zip" -p B5 -d 300 -q 92 -gl '10%,90%' -ac -ds -tcr 95 -v

このコマンドは、以下の処理を実行します。

  • 対象: C:\Scans\ フォルダ内にある、すべての .zip ファイル。
  • 解像度: -p B5 -d 300 → B5用紙サイズ、300 DPIに設定してリサイズします。
  • 画質: -q 92 → JPEG品質を 92 に設定します。デフォルト(85)より高画質になります。
  • コントラスト: -gl '10%,90%' -ac → 白黒ページは紙焼けを補正し、カラーページはコントラストを自動調整します。
  • 傾き補正: -ds → 傾きを自動補正します。
  • 圧縮制御: -tcr 95 → 変換後の合計サイズが元の95%未満にならなかった場合は、画質維持を優先します。
  • 詳細表示: -v → コンソールに詳細な処理状況を出力させます。

使用例2: 品質最優先(画集・雑誌向け)

解像度とJPEG品質を高く設定し、ファイルサイズよりも画質を最優先します。カラーイラストや写真が多い書籍に適しています。

pwsh -File .\JisuiArc2PDF.ps1 "C:\Artbooks\*.rar" -h 2400 -q 98 -ac -ds -tcr 99
  • 解像度: -h 2400 → 高さを2400pxに固定します。
  • 画質: -q 98 → JPEG品質を 98 に設定し、圧縮ノイズを最小限に抑えます。
  • コントラスト: -ac → カラーページのコントラストを自動で最適化します。
  • 傾き補正: -ds → 傾きを補正します。
  • 圧縮制御: -tcr 99 → ファイルサイズがほとんど減らない場合でも、リサイズと補正の結果を適用します。

使用例3: 漫画・コミック向け(サイズと品質のバランス)

漫画の単行本(B6サイズなど)に多い設定です。解像度を少し抑え、紙焼け補正を少し強めに設定することで、読みやすさとファイルサイズのバランスを取ります。

pwsh -File .\JisuiArc2PDF.ps1 "D:\Manga\*.zip" -p B6 -d 200 -q 88 -gl '15%,85%' -ac -ds
  • 解像度: -p B6 -d 200 → B6サイズ、200 DPIに設定。一般的なディスプレイで読むには十分な解像度です。
  • 画質: -q 88 → 標準的な品質設定です。
  • コントラスト: -gl '15%,85%' -ac → 白黒ページの紙焼け補正を少し強めにかけ、古い漫画の黄ばみを目立たなくします。カラーページは自動調整します。
  • 傾き補正: -ds → 傾きを補正します。

使用例4: 週刊・月刊雑誌向け(紙の色除去)

週刊誌や月刊誌にありがちな、少し灰色がかった紙の色を除去し、文字を読みやすくするための設定です。

pwsh -File .\JisuiArc2PDF.ps1 "D:\Magazines\*.zip" -p B5 -d 200 -gl '15%,85%' -ac -ds
  • 解像度: -p B5 -d 200 → B5サイズ、200 DPIに設定。雑誌で一般的なサイズと、可読性を保ちつつファイルサイズを抑える解像度の組み合わせです。
  • コントラスト: -gl '15%,85%' -ac → この設定の要です。
    • -gl '15%,85%': 白黒ページのコントラストを調整します。2つ目の数値 85% は「85%の明るさを持つ薄いグレーを純粋な白として扱う」という設定で、これにより背景の紙の色が除去されます。1つ目の数値 15% は、印刷の薄い文字をより濃い黒に近づけ、読みやすくします。
    • -ac: カラーページはコントラストを自動調整し、背景のくすみを取り除きます。
  • 傾き補正: -ds → 傾きを補正します。

ショートカットからの実行(JisuiArc2PDF.bat)

JisuiArc2PDF.bat は、スクリプトを簡単に対話モードで起動するためのランチャーです。

使い方:

  1. JisuiArc2PDF.bat のショートカットをデスクトップなど、使いやすい場所に作成します。
  2. そのショートカットをダブルクリックすると、自動的にPowerShellウィンドウが開き、対話モードが開始されます。

この方法は、毎回PowerShellを手動で起動する手間を省きたい場合に便利です。

ログ機能

スクリプトは、PDF変換が成功するたびに、実行日時、使用した設定、および各ページの処理内訳をログファイルに自動で記録します。

  • ログファイル名: JisuiArc2PDF_log.txt
  • 場所: デフォルトではスクリプト (JisuiArc2PDF.ps1) と同じフォルダに作成されますが、-LogPath オプションで出力先ディレクトリやファイルパスを自由に変更できます。
  • 形式: 追記型。スクリプトを実行するたびに、新しいログがファイルの末尾に追加されます。

ログの構造

ログは、実行コマンドラインサマリー行、そしてそれに続く詳細行で構成されます。

  • 実行コマンドライン: スクリプトを実行した際のコマンドラインがそのまま記録されます。各ログブロックの先頭にあります。

    • Command: pwsh -File .\JisuiArc2PDF.ps1 ...
  • サマリー行: キー="値" 形式で、処理結果の要約が1行で記録されます。

    • Timestamp: 処理が完了した日時
    • Status: 処理結果 (Success または Success with pages skipped)
    • Source: 元の書庫ファイル名
    • Output: 作成されたPDFのフルパス
    • Images: 書庫内で認識された画像の総数
    • Converted: 変換が適用された画像の数
    • Originals: 元の画像が使われた数
    • Skipped: 処理に失敗し、PDFから除外された画像の数
    • Settings: 実行時に使用された主要な設定のリスト
  • 詳細行: インデントされた詳細行には、画像1枚ごとの処理結果が記録されます。

    • - (ファイル名): Converted ...: 画像が設定通りに変換されたことを示します。
    • - (ファイル名): Original ...: ファイルサイズ比較の結果、元画像が使用されたことを示します。
    • - (ファイル名): SKIPPED ...: ファイルの変換に失敗し、このページがPDFから除外されたことを示します。

ログの例

Command: pwsh -File .\JisuiArc2PDF.ps1 .\MyBook.zip -tcr 95
Timestamp="2025-08-23 19:00:00" Status="Success with pages skipped" Source="MyBook.zip" Output="C:\Path\To\MyBook.pdf" Images=152 Converted=148 Originals=0 Skipped=4 Settings="TCR:95, Height:1683px, DPI:144, Quality:85, ..."
    - 001.jpg: Converted (Ratio: 55.12 %)
    - 002.jpg: Converted (Ratio: 61.40 %)
    - 003.jpg: SKIPPED (File conversion failed)
    ...

ログから処理結果を判断する方法

ログファイルに処理した書庫ファイルに関する記録が残っているかどうかで、そのファイルの処理が成功したか失敗したかを判断できます。

  • ページ抜け(一部失敗)の確認: サマリー行の Skipped= の数が0より大きい場合、そのPDFにはページ抜けが発生しています。 詳細行で SKIPPED となっているファイルを確認できます。
  • 完全な失敗の確認: 処理中にスクリプトが異常終了した場合、そのファイルに関するログは一切書き込まれません。
状態 ログのサマリー行
完全な成功 Status="Success" かつ Skipped=0
ページ抜け Status="Success with pages skipped" かつ Skippedが1以上
完全な失敗 対象ファイルのログブロック自体が存在しない

Paper Plane xUIから実行

変換対象ファイルをマークしてPPb経由で以下のように実行すると ワイルドカードで一括指定して処理するのではなく マークしたファイルに対して個別に処理できます。

%Os pwsh JisuiArc2PDF.ps1 (スイッチ) %FC %:*trimmark

作成経緯について

このスクリプトおよびReadmeは、そのほとんど全てがGoogleの Gemini CLI およびAlibaba Cloudの Qwen Code といった生成AIの支援を受けて作成されました。

ライセンス

このプロジェクトは The Unlicense のもとで公開されており、パブリックドメインに属します。


おまけ: PDFを画像書庫に戻す (JisuiPDF2Arc.ps1)

このリポジトリには、逆変換を行う JisuiPDF2Arc.ps1 も同梱されています。このスクリプトは、PDFファイルから全ての画像を抽出し、ZIP書庫として保存します。

主な機能

  • PDFからの画像抽出: pdfcpu を使用して、PDF内の画像をすべて取り出します。
  • ZIP書庫の作成: 抽出した画像を、元のPDFと同じ名前のZIPファイルにまとめて圧縮します。
  • 専用フォルダへの出力: 作成されたZIPファイルは、スクリプトの実行場所に pdf2arc_converted というフォルダを自動で作成し、その中に出力します。

使い方

# 単一のPDFファイルを処理
.\JisuiPDF2Arc.ps1 "MyBook.pdf"

# ワイルドカードを使い、現在のフォルダにある全てのPDFを処理
.\JisuiPDF2Arc.ps1 *.pdf

About

7-zip、ImageMagick、pdfcpuを使って本をスキャンした画像をまとめた複数の自炊画像書庫からPDFをバッチ処理で作成するPowershellスクリプト。同じ機能でPython版も作りました。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors