SIHOのプログラミングわーくワク

興味の赴くままに勉強してたら、読み書きできる言語は9個になりました。他にもいくつか気になる言語があったりなかったり?  まだまだ続く、楽しいお仕事わーくワク♪

  • « 
  • 10 
  • 11 
  • 12 
  • 13 
  • 14 
  • 15 
  • 16 
  • 17 
  • 18 
  • 19 
  • 20 
  • 21 
  • 22 
  • 23 
  • 24 
  • 25 
  • 26 
  • 27 
  • 28 
  • 29 
  • 30 
  • 31 
  • »

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

新テキストエンジンFlash.text.engineでOpenTypeのフォントを埋め込みで使う

2009.10.20 (Tue)

■参考記事
『TextlayoutFrameworkやFlash.text.engineで埋め込みOpenTypeフォントを使う方法』
『Flex SDK on Mac OS』

■やりたかったこと
xmlで管理しているテキストを、(1)縦書き表示、(2)雑誌などによくある横に2ブロックに分けて表示したかったのです。それも、(3)埋め込みフォントで綺麗なアンチエイリアスがかかっている状態で。

上記の(1)や(2)を行うには、FlashPlayer10からの機能であるFlash.text.engineを使うのが良いというので早速試しましたが、(3)がどうしてもうまくいかない。

そこで、前述の1つめの記事を見つけまして、読んだところ

EMBEDDEDというのはないんですね。


とあるではありませんか!?

でも、親切なことにFlexSDKで埋め込みフォントを包んだswfの作り方が書いてあったので、それを実践!

………したところ、できませんのよ。
2つめの記事をまじまじと読んだところ、ページの下のほうにこれまた、

ところが、大抵の場合、unable to transcodeというエラーが出る。/


がーん………orz.

ダメもとで、@taigaに状況を説明したら、

古い Flex 4 SDK なら作れますね。最近の SDK では非サポート扱いになっているようです。


とのお返事が!
私の使用していたFlexSDKのバージョンは最新版の「4.0.0.10485」でした。
一縷の望みを託して、2009/10/20現在ダウンロードできるFlexSDK4の一番古いバージョンである、「4.0.0.4021」を落として試した見たところできましたよ!!

今後非サポートになるのか代替手段が用意されているのかについては、現在(2009/10/20)問い合わせ中です。

手順の説明とサンプルファイルはこちら……
■サンプルファイル[download]
・このFlashのサンプルは複数の埋め込みフォントを用いつつ、適用させたいObjectによって使い分けるようにしてあります。
 なので、1つの埋め込みフォントでよいときは、もう少しスクリプトがシンプルになります。

・Flashの中に書くコードをシンプルにしたかったので、『Flex SDK on Mac OS』のページで紹介されているFontLoader.asファイルを使用させていただきました。
けれども、たぶんやり方が悪いのだと思うのですが、ページに書かれている方法で指定すると、nullを返してくるので、一部、修正させていただきました。

var Font_Gothic:FontLoader = new FontLoader("Mincho.swf" , "Mincho" ,this);
によってFont_Gothic.fontNameが使えるフォント名になる。



・サンプルには、FlexSDKで使ったasファイルとFlashファイルを含めています。FontLoader.asは前述のページで公開されていますので、そちらをご利用ください。変更箇所については後述しています。

■FlexSDK4の説明
・NewProjectの作成の際は「AS3Project」を選びます。
・私が確認してOKだったバージョンは「4.0.0.4021」です。最新版では×なので、ご注意を。
『TextlayoutFrameworkやFlash.text.engineで埋め込みOpenTypeフォントを使う方法』での説明では、コマンドラインからswfの作成を行っていますが、Main.asから呼び出すようにしてあげれば、[F5]キーからで作成できました。コマンドラインが苦手な(私みたいな人は)Main.asにステートメントを追加するほうが良いと思います。

■FontLoader.as の変更箇所
//処理の最後にメインタイムラインのfunctionを呼び出すために4箇所加筆。
//17行目に変数を追加
public var main_mc:MovieClip;

//19行目に第4引数を追加
public function FontLoader(url:String,fd:String,parent:Sprite) {

public function FontLoader(url:String,fd:String,parent:Sprite,initObj:MovieClip) {

//20行目に引数を変数に代入する処理を追加
main_mc=initObj;

//54行目にメインタイムラインのfunctionを呼びつつフォント名を引き渡す処理を追加
main_mc.tr(fontName);

■Flashのスクリプト例

var containerT:Sprite;
var textLine:TextLine;
var topicTitle:String="w3 1章 深海の不思議動物、植物";
var topicTitlew6:String="w6 1章 深海の不思議動物、植物";
var tfArray:Array = new Array();
var tf:TextFormat = new TextFormat();

var HiraginoMinchoPW6:FontLoader=new FontLoader("font.swf","HiraMinw6",this,this);
var HiraginoMinchoPW3:FontLoader=new FontLoader("font.swf","HiraMinw3",this,this);

function tr(fontname:String):void {
tf.font=fontname;
tfArray.push(tf.font);
//trace(tfArray);
xSetText(tfArray.length);
}

function xSetText( initNo:uint):void{
switch(initNo){
case 1:
xSetTextw3();
break;
default:
xSetTextw6();
};
};

//縦書きテキストブロックを作成:一つ目のフォントで指定する
function xSetTextw3():void {
//テキストブロックを追加するためのコンテナ
containerT=new Sprite();
containerT.x=19;
containerT.y=75;
//y座標は後述でセットされるのでここではしない

addChildAt(containerT,0);

//フォント書式
var fontDescription:FontDescription=new FontDescription();
fontDescription.fontName=tfArray[0];
//fontDescription.fontLookup=embedAsCFF;
fontDescription.fontLookup=FontLookup.EMBEDDED_CFF;//CFFフォントを使うのよ!
fontDescription.cffHinting=CFFHinting.HORIZONTAL_STEM;//可能な設定その1
fontDescription.renderingMode=RenderingMode.CFF;//可能な設定その2
//fontDescription.fontWeight=FontWeight.BOLD;//可能な設定その3

//エレメントのフォーマット
var format:ElementFormat = new ElementFormat();
format.locale="ja";
format.fontSize=18;
format.color=666666;
format.fontDescription=fontDescription;

//テキストエレメントを作る
var textElement1:TextElement=new TextElement(topicTitle,format);

//テキストブロックを作る
var textBlock:TextBlock = new TextBlock();
textBlock.textJustifier=new EastAsianJustifier("ja",LineJustification.ALL_BUT_LAST);
//縦書き指定
textBlock.lineRotation=TextRotation.ROTATE_90;
//テキストブロックのコンテンツデータにテキストエレメントを指定する
textBlock.content=textElement1;
//コンテンツデータから最初の1行分の表示オブジェクトを作る
var block_width:Number=500;
textLine=textBlock.createTextLine(null,block_width);
//コンテンツデータから1行取り出して表示する
containerT.addChild(textLine);

}

//縦書きテキストブロックを作成:別のフォントで指定する
function xSetTextw6():void {
//テキストブロックを追加するためのコンテナ
containerT=new Sprite();
containerT.x=59;
containerT.y=75;
//y座標は後述でセットされるのでここではしない

addChildAt(containerT,0);

//フォント書式
var fontDescription:FontDescription=new FontDescription();
fontDescription.fontName=tfArray[1];
fontDescription.fontLookup=FontLookup.EMBEDDED_CFF;//CFFフォントを使うのよ!
fontDescription.cffHinting=CFFHinting.HORIZONTAL_STEM;//可能な設定その1
fontDescription.renderingMode=RenderingMode.CFF;//可能な設定その2
//fontDescription.fontWeight=FontWeight.BOLD;//可能な設定その3

//エレメントのフォーマット
var format:ElementFormat = new ElementFormat();
format.locale="ja";
format.fontSize=18;
format.color=666666;
format.fontDescription=fontDescription;

//テキストエレメントを作る
var textElement1:TextElement=new TextElement(topicTitlew6,format);

//テキストブロックを作る
var textBlock:TextBlock = new TextBlock();
textBlock.textJustifier=new EastAsianJustifier("ja",LineJustification.ALL_BUT_LAST);
//縦書き指定
textBlock.lineRotation=TextRotation.ROTATE_90;
//テキストブロックのコンテンツデータにテキストエレメントを指定する
textBlock.content=textElement1;
//コンテンツデータから最初の1行分の表示オブジェクトを作る
var block_width:Number=500;
textLine=textBlock.createTextLine(null,block_width);
//コンテンツデータから1行取り出して表示する
containerT.addChild(textLine);
}



@taigaからの追加情報:
最新版のFlexでは、cffの指定をembedAsCFFで行うといけるそうだとあったので、再び試してみると、

[Fault] exception, information=VerifyError: Error #1014: クラス mx.core::FontAsset が見つかりません。
[Fault] exception, information=ReferenceError: Error #1065: 変数 HiraMinw3_font は定義されていません。


と怒られはするもののswfは作成できた。けれど、フォント名(クラス名?)が定義されていないみたいで、埋め込まれていると思われるフォントの利用はできませんでした。
でも、これは急いで試したので落ち着いて手順を試したら、できるような気もしている。
なんといっても@taigaさん情報ですからね!
この方法は後日また試してみます。

■taiga先生の記事へのリンク
「TLF (Text Layout Framework) と戯れる #9」
「TLF (Text Layout Framework) と戯れる #10」

コメント

コメントの投稿

トラックバック

flash/Actionscriptで小説ビュアーを作ってみた

テキストエンジンが改良されて日本語の縦書きが美しくできるようになっていたみたいなのでためしにそのテキストエンジンとやらを使ってみた。 This movie requires Flash Player 9 結構嵌ってしまったのでメモっときます。 まず日本語を縦書きで綺麗に表示するには、 Flas...
この記事のトラックバックURL

 | HOME | 

プロフィール

siho_prof

SIHO
しほ

Twitter:
SIHO_o

viva mambo, inc.
iPhone&iPad / Flash / Kinect
使用言語:Objective-C, ActionScript 3.0, Javascript, Lua, PHP, C#, C, C++, WSH。
F-site staff

Solar System Simulator 広報

Web,スマートフォン、Desktopを問わず、アプリ制作が好物。執筆は必要に応じて。お仕事くださいまし。

サイネージ:ガンダムフロント東京・キャラクターフォトスポット設計(2012/4~常設)

アトラクション:富士急ハイランド 戦国BASARA ゲーム設計&プログラミング(2010/7-2012/4にて常設展示)

イントラシステム:「某メーカー研究所KJ法システム」DB,Flash,PHPを含むソリューション設計&DB構築、「美術系専門学校の生徒管理システム」iPadクライアントを含むソリューション設計&DB構築

iPhone/iPadアプリ:某球団試合速報アプリ、『魂を熱くさせる 宇宙飛行士100の言葉』『Mitaka Gallery -てのひら宇宙-』

書籍同梱ソフト:『4次元デジタル宇宙紀行Mitaka』『DVD-ROM&図解 動く! 深海生物図鑑』『DVD-ROM&図解 ハッブル望遠鏡で見る宇宙の驚異』

著書:『世界一わかりやすい Windows 7』『世界一わかりやすい Flash CS3』

検索フォーム

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。