ImageMagickで画像に文字を埋め込み

kindle本の扉ページがなかなかうまくいかなかった。
調べると、EPUB3でリフローのページ、縦書きの文字がページ中央に配置されている「扉ページ」は、現状では無理だということだった。divなどのブロック要素で横幅指定してさらに中に重ねて横幅をごまかして、などやってみたものの、ブロック要素の横幅指定100%や50%が効かない。text-align centerは、上下で中央揃え…ってこんなの意味ない。
[11/30 09:32:30] 追記。リフローとフィックスが混在できないのは、この時点でのkindleの仕様。EPUB3は混在可能。http://densho.hatenablog.com/entry/fixed-layout-metadata こちらのページが詳しい。
[04/01 11:41:03] 追記。リフローレイアウトでも扉ページを実現する方法がある。
詳しくはこちら → EPUB3リフローレイアウトで扉ページ
しかたなく、扉ページを画像にすることにした。
画像であれば、imgタグをひとつ書いただけのhtmlで表示させれば、扉ページとして意図通りのものになる(って、たぶん、そのうち扉ページを文字だけで表現できるようになる、と思うので画像を使うのは徒労感で脱力)
600x800(4:3)の白画像jpgを用意して、扉に使うタイトル文字を縦に埋め込む。ImageMagickだと、すんなり縦書きにできなくて、結局ひと文字ずつバラして並べた。
以下が、ImageMagickのAnnotateで画像に文字を埋め込んでる部分
my $p = Image::Magick->new;
my $r = $p->Read($blank_image);
my $pos = 28;
my @strings = split(//, $text);
foreach my $c (@strings){
$p->Annotate(
encoding=>UTF-8,
fill => black,
font => $font,
gravity => North,
pointsize => 28,
text => Encode::encode(utf8, $c),
undercolor => white,
y =>$pos,
);
$pos += 28;
}
$r = $p->Write($out_image);
・fontにはIPA明朝を使わせてもらった。
・文字サイズは28pt
・上を起点に28ptのところから埋め込み。
・白地に黒文字
・x位置は何も指定していないけどセンターにきたので結果オーライ

リフロー。ページで組版するわけじゃないのが、原因。リフローされるとページという考え方が難しくなる。
ということで。扉ページに対応しました。

