3

node.js とnode-canvasパッケージを使用して、フレームごとに抽出してアニメーション ファイルを作成しようとしています。アニメーションの一部に拡大縮小と動画が含まれます。私の問題は、node-canvas とcario (キャンバスの背後にあるグラフィック ライブラリ)によれば、デフォルトでアンチエイリアシングを行う必要がありますが、アンチエイリアシングが行われていないように見えることです。また、node-canvas によると、この systex を使用してアンチエイリアシングを制御できますがctx.antialias = 'gray';、何もしないようです。私が提供できる詳細があれば、私に知らせてください。node-canvas または cairo を直接使用して、画像変換にアンチエイリアシングを追加する方法はありますか?

PS私はctx.drawImageメソッドを使用して画像を描画していますが、すでに試してみましたがpatternQuality = 'best';成功しませんでした。

4

1 に答える 1

6

パターンをアップスケーリングするとき、cairo はデフォルトで双一次補間を使用しますが、これは合理的に見えるはずです。ただし、ダウンスケーリングすると、現在 (1.12.14 の時点で) cairo はアンチエイリアス パターンを適切に処理しません。実際に機能を cairo 自体に追加する以外に、これを取得する方法はありませんが、潜在的な回避策については以下を参照してください。

cairo の 'antialias' 設定は、パターンではなく、ラスタライズされた形状とテキストのアンチエイリアスを制御します。パターンのアンチエイリアシングを制御する設定は「cairo_pattern_set_filter」と呼ばれ、次の値があります。

CAIRO_FILTER_FAST,             // usually the same as NEAREST
CAIRO_FILTER_GOOD,             // usually the same as BILINEAR
CAIRO_FILTER_BEST,             // usually the same as BILINEAR
CAIRO_FILTER_NEAREST,          // for upscaling, this is pixel-replication
CAIRO_FILTER_BILINEAR,         // for upscaling, this is linear interpolation
CAIRO_FILTER_GAUSSIAN          // not implemented, should not be used

しかし、前述のように、ダウンスケーリングにはどれもうまく機能しません。

一部の人々が使用している回避策は、画像を 2 段階で縮小することです。つまり、おおよそ目的のサイズになるまで、画像を両方のサイズで半分のサイズに縮小し続けます。この縮小されたイメージは、2 未満に縮小する変更された変換で使用できます。

于 2013-02-14T08:08:01.360 に答える