求める電子書籍端末を試作する
前回、スキャンして日付順のフォルダに保存するところまで説明しました。今回は、保存したあとに行う閲覧作業と、専用に試作した電子書籍ビューアーを紹介します。
専用ビューアーといっても、じつは以前から使用しているPictureViewを2ページモードで実装し直したものです。通常の写真の場合には、ランダムに回転して、付箋風にExif情報を表示するのがPictureViewの標準モードです。写真を表示するときには、このランダムな感じが自然に見えて、とても気に入っています。
PictureViewは多重起動のできるSDI式のアプリケーションで、複数の写真を同時に表示することも可能です。PictureViewには、書籍ビューアーに必要と考えられる手書きメモ機能とテキストメモ機能があり、わざわざ新規に開発する必要がないのは開発効率を高めていると思います。
PictureViewを電子書籍ビューアーに転用するためには、ふたつの追加機能が必要です。 ひとつは、正位置に表示することです。1枚の(あるいは数枚程度の)写真を表示するときにはランダムに回転していても自然ですが、本の場合、ページをめくる度に回転して表示すると、大変不自然に感じられます。というか、ページとしして片側を固定している本で回転して表示することはありえないです。そこで、本モードでは正位置の回転しない表示を行うことにしました。
ふたつめは、2ページずつ表示することです。既存の電子書籍端末で表示面積とボディサイズのトレードオフで、「1ページずつ表示するか」「2ページを縮小表示するか」のどちらかを考えることになりますが、筆者が使用しているのは21型のディスプレイで、単純計算でKindleやiPadの倍のサイズですから、2ページ表示してもKindleやiPad程度には見えることになります。
デジタル化からフォルダへの移動/転送
デジタル化したファイルは、スキャン専用マシンの作業フォルダ上に、JPEGファイルとして一時的に保存します。1冊の本で200枚程度のJPEGファイルを作成します。このフォルダには、ISBNから自動的に取得したフォルダと、そのフォルダにJPEGファイ
ルを移動するスクリプトファイルを生成しています。
デジタル化が終わると、メインマシンへの転送です。メインマシンへの転送は、その日のフォルダの下に、フォルダの日付を自動的に認識して自動的に行います。
転送した直後は、スキャナの構造上の関係で、カバーや表紙は横に倒れています。PictureViewを使って表示しながら回転します。
本の表示で重要なことは、カバーや帯などのつきものの扱いでした。カバーや帯は普通のページとはサイズが異なるため、スキャナの構造上、デジタル化後に回転処理を行う必要があります。
そこで、PictureViewに回転機能を実装しました。
回転後のカバーファイルは、正位置になります。
モードレスと本モードに必要なこと
PictureViewひとつで、写真モード(1枚だけを回転して表示)と本モード(2ページずつ無回転で左右に分割して表示)をモードレスに自動で表示し分けるのにはタグが必要です。写真のときには写真モード、本のときには本モードを自動認識します。タグづけをどう簡素化するかですが、スキャン時に本のタイトルには、本のタイトルであるタグを自動的につけることにしました。これで、スキャンして起動すれば、本のときには自動的に本モードで表示できます。ぜんぶのシステムを自前で作っているメリットです。
2ページビューアーとしての特徴は、右ページを右側に表示する機能を実現した点にあります。2ページビューアーを単純に実現しようとすると、1ファイル目を右側に、2ファイル目を左側に(あるいはその逆に)自動的に割り振るので、ページの左右が逆転してしまうことがあります。Googleのブックビューアーなどで起きています。
不自然な左右の逆転を回避するために、PictureViewでは、扉ページに着目して、扉ページのファイルを起点として左右ページにファイルをタグづけして割り振ることにしました。
タグにより、扉ページさえ固定すれば、左右ページが逆転することはなくなります。現在はこの扉ページからのタグづけとカバーの回転を手動で行っています。近い将来、これも自動化しようと考えています。ファイルの縦横のサイズを取得して縦横比を算出し、
色数を取得すれば、だいたい自動化できるのではないか、と考えているところです。アンドゥ機能は実装ずみなので、自動化に失敗したら手動で直すことは容易です。以上により、複数のjpegファイルからなる「書籍」を本のように自然に左右ページをきちんと表示し、手書きとテキストでメモを取ることのできる書籍ビューアーを実現しました。
今後、現在表示しているページ以外を重なったページとして表示する機能、重なったページをクリックすると該当ページにジャンプする機能、ページの厚みによってセンターが次第に右から左に移動する機能、ページの中央に書籍のように影をつける機能、ページを抜き出して比較する機能、ページに書き込みするペンの色を設定する機能、洋書対応などを実装する予定です。