dnjiro’s 9VAe blog

誰でもアニメが作れる無料ソフト9VAeきゅうべえ開発者のブログ

9VAeきゅうべえiPad版 フォント処理作成

SVG出力の Mac Safari 対応について、一旦終了し、また、iPad版の開発を再開。

 

今日はフォント処理を作成。

 

文字フォントは、ほんとに難しい。9VAeきゅうべえの場合、マルチOS対応で作っており、別のOSで作ったアニメの中の文字が、同じように再現させたいのだが、達成できていない。

OSや環境によって搭載されているフォントが違う

という根本的な問題があるのだが、似たフォントで、なるべく同じようなレイアウトになるようにしたいところだ。9VAeの仕様は

  • 文字の外接長方形を保存、その中に文字を収めて描画すればよい

としている。ということで文字の修正は、なるべく同じOSで行ってください。フォントを再現させたい場合は

inkscapeなどを使って文字をアウトライン化

つまり図形にして入れる方法があります。

 

フォントリストの作成

familyNamesメソッドを使うと取得できるようだ。イタリックとか太字の設定もできるみたい。以下を参照。これでフォントリストを作成し、文字の属性パレットに入れる方向で進める。

UIFont - iPhoneアプリ開発の虎の巻

とりあえず、文字フォントの変更ができたところ

f:id:dnjiro:20171018101103p:plain

 

フォントをリストに入れることができた。ファミリー名は以下のコードで取得できた。

- (void) setFontList{

    for (NSString *family in [UIFont familyNames]){

        [qvae setIoText:qVAcFOSinp text1:family text2:@""];

    }    

}

 

[qvae setIoText:qVAcFOSinp...]は、フォント名を設定するために作った 9VAeの内部関数。

太字、イタリックも簡単であった。以下のようにfontを変更すると太字やイタリックになった。

CTFontRef font0,font=NULL; CTFontSymbolicTraits bit=0;

CFStringRef str = "フォントの名前"; int fh =フォントサイズ;

        font0 = CTFontCreateWithName(str, fh, NULL);

        if(太字) bit |= kCTFontBoldTrait; //太字

        if(イタリック) bit |= kCTFontItalicTrait; //イタリック

        if(bit){

            font = CTFontCreateCopyWithSymbolicTraits(font0, 0.0, NULL, bit, bit);

        }

        if(!font) font=font0;

 フォントによっては、太字やイタリックがないものがあり、fontが取得できない場合があるので、その場合は、font0を使う。

文字フォントの中に日本語がない場合、ちゃんと別のフォントを使ってくれるみたいだ。文字化けしないのはえらい。

f:id:dnjiro:20171018163253p:plain

これを、Mac版の9VAeきゅうべえで読み込むと・・・

f:id:dnjiro:20171018163741p:plain

ああ、やっぱり文字化けしてる。Macには同じフォントがあるが、文字コードによってフォントを切り替える仕組みが入っていないようだ。もともとフォントの互換性がないので諦める? iPadでフォント指定して入力した日本語が全部文字化けするかも。