2

カスタム フォントをテキスト フィールドに適用していますが、これは Openlaszlo 3.3 では正常に機能していますが、新しいバージョン (5.0) ではフォントが適用され、スタイルも適用されていますが、文字間のスペースが多くなっています。しかし、これは古いバージョンでは起こりません。

両方のバージョンでオブジェクトを調べたところ、顕著な違いは行の高さだけであることがわかりました。

なぜこれが起こっているのですか?それらのスペースを削除する方法は可能ですか?

3.3 スクリーンショット

3.3 クライアント

5.0 スクリーンショット

ここに画像の説明を入力

4

1 に答える 1

2

表示されている効果は、埋め込まれた TTF フォントを Flash が処理する方法に関連しています。これらのフォントを使用するテキストは、Flash Player によって完全にレンダリングされます。特に、Flash Player 8 から 9 への変更により、テキストのレンダリングに多くの改善がもたらされました (埋め込みフォントのアンチエイリアスが改善され、最終的に文字を変更する機能が追加されました)。

表示されているテキストのレンダリングの違いは、おそらく Flash Player 9 以降でアンチエイリアスが改善されたことが原因です。OpenLaszlo SWF9+ テキストおよび inputtext コンポーネントは、flash.text.AntiAliasType.ADVANCEDデフォルトとして設定を使用します。

以下は、OpenLaszlo dev メーリング リストで、あなたが見ている効果について言及しているディスカッションです。

フォントのレンダリングは可能な限り高品質であるべきです -- FP9 で古いスタイルのレンダリングを望む人はいないと思います。このバグを修正する別の方法はありませんか?

ランタイム全体で完全なフォント レンダリングの一貫性を得るつもりはありません。デバイス フォントを使用する場合、既に一貫性がありません。ブラウザ/プレーヤー/OS のバリエーションはそれぞれ異なり、Flash と DHTML も異なります。

私の知る限り、その設定を変更するための公式 API はありません。そのプロパティの変更がテキストのレンダリングにどのように影響するかをテストできる小さなアプリケーションを作成しました。上の 2 つのテキスト項目は Flash Player のデフォルト フォントを使用するため、アンチエイリアス設定はレンダリングに影響しません。次の 4 つのテキスト項目はすべて埋め込み TTF フォントを使用しており、設定によって違いがわかりantiAliasingTypeます。

アンチエイリアシングが通常または高度に設定された OpenLaszlo SWF9/10 テキスト レンダリング

アプリケーションをコンパイルするには、次のフォントをダウンロードしてアプリケーション フォルダーに配置します。

http://svn.openlaszlo.org/openlaszlo/trunk/laszlo-explorer/fonts/ariosob.ttf
https://github.com/w0ng/googlefontdirectory/raw/master/fonts/Amaranth-Regular.ttf

<canvas height="600">

    <font name="amaranth" style="plain" src="Amaranth-Regular.ttf" />
    <font name="arioso" src="ariosob.ttf" />

    <class name="mytext" extends="text">
        <passthrough when="$as3">
            import flash.text.AntiAliasType;
        </passthrough>
        <attribute name="antialias" type="string" value="advanced" />
        <handler name="oninit">
            this.onantialias.sendEvent();
        </handler>
        <handler name="onantialias">
            var t = this.getDisplayObject().textfield;
            if ( this.antialias == 'normal' ) {
                t.antiAliasType = flash.text.AntiAliasType.NORMAL;
            } else {
                t.antiAliasType = flash.text.AntiAliasType.ADVANCED;
            }
        </handler>
        <method name="toogleAntialias">
            if ( this.antialias == 'normal' ) this.setAttribute( 'antialias', 'advanced' );
            else this.setAttribute( 'antialias', 'normal' );
        </method>
    </class>

    <view>
        <simplelayout axis="y" spacing="10" />
        <view layout="axis:x; spacing:5">
            <text valign="middle">Anti-alias advanced</text>
            <checkbox value="true" y="10"
                      onvalue="if (parent.t) parent.t.toogleAntialias()" />
            <view width="20" height="1" />
            <mytext name="t"
                    antialias="advanced"
                    fontsize="25">Default font (no embedded TTF)</mytext>
        </view>
        <view layout="axis:x; spacing:5">
            <text valign="middle">Anti-alias advanced</text>
            <checkbox value="false" y="10"
                      onvalue="if (parent.t) parent.t.toogleAntialias()" />
            <view width="20" height="1" />
            <mytext name="t"
                    antialias="normal"
                    fontsize="25">Default font (no embedded TTF)</mytext>
        </view>

        <view layout="axis:x; spacing:5">
            <text valign="middle">Anti-alias advanced</text>
            <checkbox value="true" y="10"
                      onvalue="if (parent.t) parent.t.toogleAntialias()" />
            <view width="20" height="1" />
            <mytext name="t"
                    antialias="advanced"
                    font="amaranth" fontsize="25">Amaranth Regular</mytext>
        </view>
        <view layout="axis:x; spacing:5">
            <text valign="middle">Anti-alias advanced</text>
            <checkbox value="false" y="10"
                      onvalue="if (parent.t) parent.t.toogleAntialias()" />
            <view width="20" height="1" />
            <mytext name="t"
                    antialias="normal"
                    font="amaranth" fontsize="25">Amaranth Regular</mytext>
        </view>

        <view layout="axis:x; spacing:5">
            <text valign="middle">Anti-alias advanced</text>
            <checkbox value="true" y="10"
                      onvalue="if (parent.t) parent.t.toogleAntialias()" />
            <view width="20" height="1" />
            <mytext name="t"
                    antialias="advanced"
                    font="arioso" fontsize="25">Amaranth Regular</mytext>
        </view>
        <view layout="axis:x; spacing:5">
            <text valign="middle">Anti-alias advanced</text>
            <checkbox value="false" y="10"
                      onvalue="if (parent.t) parent.t.toogleAntialias()" />
            <view width="20" height="1" />
            <mytext name="t"
                    antialias="normal"
                    font="arioso" fontsize="25">Amaranth Regular</mytext>
        </view>
    </view>

</canvas>

オペレーティング システムはテキスト レンダリングを最適化するためにさまざまなアプローチを使用するため、結果はすべてのオペレーティング システムで一貫しているとは限りません。上のスクリーンショットは Linux で撮影されたものです。

于 2012-12-04T20:02:28.763 に答える