2011年05月08日

ImageMagickで日本語の文字列を画像に描画

OS:Mac OS X Leopard(10.5.6)
ソフト:ImageMagick

Magick++とC++で画像を生成して、そこに日本語を描画させようとしたのですが、どうにも上手くいかないので、別のやり方でやってみました。ImageMagickのconvert コマンドです。

convertコマンドで日本語を描画する場合の注意点として2つあると思います。
注意点1
フォントは日本語に対応しているものをパスを含めたフォントのファイル名で指定する
注意点2
描画したい文字列はUTF-8で保存したファイルで用意する

説明だけではピンとこないので、いつくかコマンド例を示します。


成功例-フォントも文字列もきちんと指定


フォントの指定も、描画する日本語の指定も問題がない場合を以下に示します。背景は白、文字の色は黒です。
convert -background white -fill black -font "/System/Library/Fonts/ヒラギノ角ゴ ProN W3.otf" label:@input.txt text.png

-fontの後にフォントのファイルを指定します。文字列はlabelの後に@を付けてファイル名を指定します。最後に、出力する画像のファイル名を指定します。
以下の画像が生成されます(「こんにちわ」って描画されています)。
text



失敗例-フォントのパスが間違い


-fontに間違ったパスを指定した場合です。
convert -background white -fill black -font "ヒラギノ角ゴ ProN W3.otf" label:@input.txt text.png

これを実行すると以下のようなワーニングが出ます(text.pngは生成されます)。
convert: unable to read font `ヒラギノ角ゴ ProN W3.otf' @ warning/annotate.c/RenderType/879.

フォントファイルが読み込めませんということですね。
画像は生成されるのですが、正しく描画されません。以下のようになります(「?????」って描画されています)。
text_error
それと、フォントに関してですが、フォントを指定しなくても「?????」が生成されます。


おまけ-日本語を直接指定でもOK


私のMacはターミナルの文字コードがUTF-8だからだと思うのですが、labelに文字列を直接指定しても正しく描画されました。以下がコマンドです。
convert -background white -fill black -font "/System/Library/Fonts/ヒラギノ角ゴ ProN W3.otf" label:直接こんいちわ text.png

text.pngには「直接こんいちわ」と描画されています。この方法だとWindowの方はどうなんでしょう?やっぱり、ファイルをUTF-8で保存する方が良いのかな?

2011年05月05日

Mac OS X にImageMagickをインストール

OS:Mac OS X Leopard(10.5.6)
ソフトウェア:ImageMagick

ImageMagickは、多様な形式の画像ファイルを扱える便利な画像処理プログラムです。画像処理というと、GUIでマウスを使って...と思いがちですが、これはコマンドラインから画像を読み込んで処理するCUIのプログラムです。
大量の画像ファイルを別の形式に一括変換するなどの処理を行う場合に便利です。

そういうわけで、ちょっとMacに入れてみました。

最初はソースを落としてきて、自分でmakeしてみましたが、(インストールは出来たのに)上手く動きませんでした(他のライブラリが足りなかったのかな?)。Macに入れる場合、MacPortsを使ってインストールするのが良いようです。MacPortsとは、パッケージ管理ツールで、主要なツールやライブラリはMacPortsを使えば大抵揃うらしいです。

1. MacPortsのインストール


MacPortsをインストールする前に、Xcodeをインスロールする必要があります。Xcodeはインストールディスク(OSが入っているやつです)からインストールして下さい。
次にこちらからバージョンに合ったdmgファイルをダウンロードしてインストーラを起動するとインストールできます。

インストールしたら、パスを通します。ホームディレクトリに移動して、.bash_profileファイルに以下の内容を追加します。
export PATH=/opt/local/bin:/opt/local/sbin/:$PATH
export MANPATH=/opt/local/man:$MANPATH


2. ImageMagickのインストール


ターミナルを起動して
>sudo port install ImageMagick
でインストールできます。必要なライブラリなども一緒に入るので便利です。環境にも依ると思いますが、結構時間がかかります(私は軽く1時間以上かかった)。



ImageMagickは他の言語から使えたりと幅が広いです。とりあえず、C++から使えるMagick++というライブラリ(ImageMagickと一緒にインストールされました)の使い方を覚えたいです。

2010年10月05日

tar.gz形式を解凍するUnixコマンド

OS:Mac OS X Leopard(Unix)

プログラムをソースからダウンロードすると、取得したファイル(tar.gzが多い気がする)を解凍しなきゃいけないんだけど、そのコマンドが結構忘れるので、書きます。

% tar zxvf 解凍するファイル名

です。

2010年03月10日

C++のテンプレート関数

C++では、テンプレート関数というものが使えます。テンプレート関数を使うと、1つの関数でいろいろな型に対応する処理を行うことができます。テンプレート関数を宣言するには、普通の関数宣言の前にtemplate <typename type>を付けます。以下に例を示します。

template <typename T> T add(T v1, T v2)
{
  return (v1 + v2);
}

typeの部分は、任意の名前を付けることができます。この例は、2つの値の和を求める関数です。v1、v2がint型でもdouble型でも和を計算することができます。

この関数を使ったプログラムの例を示します。ファイル名は、templateFunc.cppにしました。

#include <stdio.h>

template <typename T> T add(T v1, T v2)
{
  return (v1 + v2);
}

int main()
{
  int a = 1, b = 2;
  double c = 3.0, d = 4.0;

  printf("a+b=%d\n", add(a, b));
  printf("c+d=%lf\n", add(c, d));

  return 0;
}

コンパイルして実行すると、

a+b=3
c+d=7.000000

と表示されます。型が異なっても、ちゃんと計算できていることが判ります。

※このプログラムはMac OS Xのgccでコンパイルしています。コマンドは
>g++ templateFunc.cpp
です。エラーがなければ、a.outが生成されるので、
>./a.out
で実行できます。

2010年02月01日

MySQLでrootのパスワードを設定する - (MySQL, Mac OS X)

blog_2_2

データベース:MySQL
OS:Mac OS X

MacにインストールしたMySQLを使ってみます。
まず、rootのパスワードを設定します。ターミナルから以下のコマンドを実行します。

>/usr/local/mysql/bin/mysqladmin -u root password 'password'

赤字のpasswordの部分を新しいパスワードにします。

次に、rootでMySQLを使用してみます。次のコマンドでアクセスします。

>/usr/local/mysql/bin/mysql -u root -p

すると、パスワードの入力を求められるので、先ほど設定したパスワードを入力します。
成功すると、以下のようなMySQLのプロンプトに移ります。

mysql>

せっかくなので、コマンドを実行してみます。登録されているデータベースを表示するコマンドです。以下のコマンドを実行します。

mysql>SHOW DATABASES;

すると、以下のように表示されます。

mysql_show_databases

※is_test1は私が作成したデータベースなので、初期状態では、information_schema, mysql, testの3つが表示される。

MySQLでは、データベースを作成して、そのデータベースの中にテーブルを作成することでデータを管理します。