読者です 読者をやめる 読者になる 読者になる

自炊した電子書籍で裏表紙からバーコードを自動で取得する方法


自炊した電子書籍で裏表紙からバーコードを自動で取得する方法の説明です。
いろいろとスキャンをしていて、タイトルの名前いれがめんどいなぁってことでせっかくなのでバーコードを自動でスキャンしてくれたらいいなってことで、PHPで作ってみました。
PDFを解析して、バーコードナンバーをテキストで取得することができます。
あとはこれをAmazonのAPIなどに投げれなOKです。

必要なライブラリ

FPDF
PHPでPDFを出力するためのライブラリです。
Setasign Downloads of FPDI and FPDF_TPL
PHPでPDFを読み込むためのライブラリです。
ZBar bar code reader - Browse /zbar/0.10 at SourceForge.net
画像からバーコードを自動で検出します。

あとImageMagick ( と peclのimagick ?) が必要になると思います。
ImageMagick と ZBarのインストールはこちらを参照してくださいませ。

index.php

PHPの担当はPDFファイルから最後のページを取得して、画像変換と画像解析の外部コマンドをたたきます。

<?php
//var_dump( $argc );
//var_dump( $argv );
if( $argv[1] == "" ){
  exit;
}
require_once('fpdf.php');
require_once('fpdi.php');
//Get pdf file name
$file = escapeshellcmd( $argv[1] );
$basename = basename( $file );
//Get pdf num page
$tmp_pdf = new FPDI();
$pagecount = $tmp_pdf->setSourceFile( $file );
//Output last pdf page
$write_pdf = new FPDI();
$write_pdf->setSourceFile( $file );
$tmp_info = $write_pdf->importPage( $pagecount );
$write_pdf->addPage();
$write_pdf->UseTemplate( $tmp_info );
$write_pdf->Output( "backcover_{$file}" , "F" );
//Let's convert pdf 2 jpg ( 300 DPI )
exec(" convert -density 300x300 backcover_{$file} backcover_{$basename}.jpg " );
//Scan barcode from jpg image
echo ` zbarimg backcover_{$basename}.jpg`;
?>

実行と結果

以下のようにPDFファイルを指定して実行します。

$ php index.php web.pdf

すると画像を解析して、以下のようにバーコードを返してくれます。

EAN-13:1923055028005
EAN-13:9784873114460

参考になる本

パーフェクトPHP (PERFECT SERIES 3)

パーフェクトPHP (PERFECT SERIES 3)

かなりしっかりした内容なので、バイブルとして一冊持っておきたい。
PHP 逆引きレシピ (PROGRAMMER'S RECiPE)

PHP 逆引きレシピ (PROGRAMMER'S RECiPE)

関数辞典もいいけど、逆引きのほうが目的がはっきりわかるので初心者におすすめです。