@Konboi memo

主に技術に関してつらつらと。

Image::Magick で文字の縁をよしなに描く

Image::Magick を選んだ理由

最初は、Imager を使ってモックも作ってたのでImagerを使いたかった。 縦書きのモジュールもあるので今回のやりたい事がほぼほぼできてた。

ただ、デザイナーさんから

文字に縁をつけて!!

って言われた。 これが Imager では結構きつかった。 縁になる文字のフォントサイズを大きくしたりしてみたけど、結構限界があった。

周りに色々質問してみたら、

Image::Magick だったらデフォルトで縁つけれるよ!

って言われたので Image::Magick を使うことにした。

Image::Magick で文字に縁をつける方法

普通だったらこんな感じで文字に縁がつく。

my $img = Image::Magick->new();
$img->Read("{file/path/name}");

$img->Annotate(
    font      => 'font/path',
    text      => 'sample',
    pointsize => 80,
    x         => 10,
    y         => 100,
    fill      => 'blue',  #縁の中の色  
    stroke    => 'white',     #縁の色  
);

$img->Write('save/file/path');

ただ、これだと描画される縁が結構細い。 今回は、太い縁が描画したかったので色々やってみた。

strokewith

っていう縁の太さを指定できるオプションがあるのでやってみた。

my $img = Image::Magick->new();
$img->Read("{file/path/name}");

$img->Annotate(
    font        => 'font/path',
    text        => 'sample',
    pointsize   => 80,
    x           => 10,
    y           => 100,
    fill        => 'blue',
    stroke      => 'white',
    strokewidth => 5,           #縁の太さ
);

$img->Write('save/file/path');

Image::Magick の仕様上縁が内側の太くなっていく。

試行錯誤の結果、下記の方法が一番綺麗になった。

my $img = Image::Magick->new();
$img->Read("{file/path/name}");

$img->Annotate(
    font        => 'font/path',
    text        => 'sample',
    pointsize   => 80,
    x           => 10,
    y           => 100,
    fill        => 'blue',
    stroke      => 'white',
    strokewidth => 5,   
);

$img->Annotate(
    font        => 'font/path',
    text        => 'sample',
    pointsize   => 80,
    x           => 10,
    y           => 100,
    fill        => 'blue',
);


$img->Write('save/file/path');

こうやるといい感じに縁が描画される。 縁の太さは1回目の描画の strokewidth で調節すればいい。

そんな感じ。

Markdown書式でソースコードきれいに貼りたいんだけどどうしたらいいかな...

``` perl

...

```

みたいな感じで バッククォーテーション 言語名でハイライトしてくれるみたい! ( ^ิ౪^ิ){ やったね!

あとで、画像貼ろ。