まいける's Tech Blog

LAMP関係のメモなどを不定期に掲載します

PHP で PDF のサムネイル画像を作成する

 必要に迫られたので、ちょっと調べてみたところ、意外に簡単。前提として、imagick モジュールが必要となるので、このあたりを見ながらインストールを済ませておいてください。

 それで、その方法ですが

<?php

// 読み込む PDF をフルパスで指定
$file = '/foo/bar/test.pdf';

// サムネイルを作成するページを指定
$page = 1;

// 実際の指定では、1ページが0になるので、調整
$page = $page - 1;

$im = new imagick($file[$page]);
 
// PNG 形式に変換
$im->setImageFormat("png");

// 長辺が 300 ピクセルになるようにリサイズ
$im->thumbnailImage(300, 300, true);

// 表示
header("Content-Type: image/png");
echo $im;

?>

こんな感じです。このままだと、1つのファイルしか読めないので、実際には引数を与えて読み込むファイルを指定して使う感じになると思います。

意図したエントリー以外にトラックバックが投げられてしまう問題を解決する

 MTで、トラックバックURLで指定されている記事番号(例:1234)にトラックバックを投げているにもかかわらず、別の記事(例:1235)にトラックバックが登録されてしまう場合、mt_trackback テーブルの trackback_id と trackback_entry_id が整合していない可能性があります。
 こんなことはそうそう起こるものではないのですが、はまりかけたので備忘録として残しておきます。

 この場合、trackback_entry_id が mt_entry テーブルの entry_id と紐づいているので、trackback_id に trackback_entry_id を合わそうとすると、修正箇所が多くて大変です。なので、trackback_entry_id に trackback_id を合わせることにします。この場合の問題点は、trackback_id が PRIMARY KEY になっていることと、auto_increment が付いていること。PRIMARY KEY は重複を許さないので、trackback_id と trackback_entry_id のズレがわずかな場合、単に

UPDATE mt_trackback SET trackback_id = trackback_entry_id;

を実行すると、エラーになります。そこで、

UPDATE mt_trackback SET trackback_id = trackback_entry_id + 20000;
UPDATE mt_trackback SET trackback_id = trackback_entry_id;

のように、いったん重複しない値に変更した上で、本来の値に書き換える必要があります。また、この作業を行っただけだと、auto_increment によって、trackback_id に次に付けられる値は変更されないので、再びずれてしまいます。そこで、

ALTER TABLE mt_trackback AUTO_INCREMENT = 1235;

のように、trackback_entry_id の最大値+1の数字を設定してあげることで、上記の問題を解消する必要があります。

 以上、備忘録でした。

 最後に少し宣伝を。Amazon の書籍・雑誌の詳細ページから楽天ブックスの同じ商品のページに飛ばすブックマークレットや、Amazon の価格よりも安い楽天のショップを探すブックマークレットを公開しています。たまったポイントの利用などで楽天を使いたい人には便利だと思いますので、よろしければご利用ください。
http://tools.trend-antenna.com/

Automator を使ってフォルダ内の aif ファイルを lame で mp3 にエンコードする

 下の記事を発展させて、フォルダ内の aif ファイルをまとめてエンコードすることに成功したので、その記録。

 前提として、lame の場所は、/Applications/iTunes-LAME.app/Contents/Resources/lame にあるとします。

 次に、Automator を組んでいきます。使用するのは、「選択された項目を取得」「フォルダの内容を取得」「シェルスクリプトで実行」。最初の2つは特に問題ないので、肝心なのはシェルスクリプトの中身。

for f in "$@"
do
if [ ${f##*.} = "aif" ];then
/Applications/iTunes-LAME.app/Contents/Resources/lame --preset fast extreme --quiet "$f" "${f%.*}.mp3"
fi
done

こんな感じで書きます。シェルは /bin/bash、入力の引き渡し方法は「引数として」を選びます。

 これで、「ファイル>プラグインとして保存」で対象を Finder にして「フォルダ内のファイルをMP3に変換」のような名前で保存すれば、対象のフォルダのコンテクストメニューを開き、「その他>Automator>フォルダ内のファイルをMP3に変換」で一括してエンコードすることができます。ファイル名は元の aif ファイルと同じで、拡張子だけが mp3 に変わります。