1

これがPHPで可能かどうかはわかりませんが、可能であれば、ここの誰かがその方法を知っていると思いました. 私は現在、ユーザーがサイト全体で使用される全身のメイン アバターをカスタマイズできるプロジェクトに取り組んでいます。カスタムアバターを作成するために選択できる、さまざまな顔、髪などの透明な png 画像がたくさんあります。これはうまく機能していますが、ここが難しい部分です。顔、髪、あごひげ (男性の場合) を使用して、フォーラムの投稿などの小さなアバターとして使用される 80x80 の画像を自動的に作成できるようにしたいと考えています。

これにはいくつかの障害があります。まず、すべての画像は 187x404 です (画像の大部分は透明で、キャラクターの体の画像は画像を積み重ねることで実現されるため、顔の画像は実際にはそれほど大きくありません)。これが機能するには、余分なスペースがすべて削除され、実際の顔、髪、またはひげの部分が 80x80 のスポットに表示されるように、画像を効果的に自動的にトリミングする必要があります。

2 つ目の問題は、髪やあごひげの一部が (フルサイズの顔画像に配置された場合) 80x80 を超えてはみ出し、切り落とされることです。そのため、画像をフル サイズでつなぎ合わせてから、80x80 に収まるようにサイズを変更する必要があります。

私は3つの画像を1つに結合する基本的な方法を知っています(2〜3個の透明なPNG画像をPHPで重ね合わせます)が、それは私が得た限りです。私が頭がおかしくて、これが不可能な場合は、教えてください。私はおそらくこれを非常に複雑にしているので、これを達成するための明らかに簡単な方法があれば、ぜひ聞いてみたい.

4

3 に答える 3

2

最初に、トリミング、サイズ変更、または両方の組み合わせ (より大きな正方形にトリミングしてサイズ変更) を決定する必要があると思います。

とにかく、既に画像を 1 つに結合している場合、3 つのオプションはすべて PHP で簡単に実行できます。imagecopyresampled()を見てください。

于 2009-09-10T00:51:31.763 に答える
1

最も簡単な方法は、常に顔/髪/ひげを画像の同じ領域に合わせることです。次に、その領域を切り取るだけです。

必要に応じて、小さなアバターで表示する必要がある画像内の四角形を指定して、各画像の追加データを保存できます。次に、構成するすべての画像でこれらの長方形の最大端を取得し、それをトリミングして小さなアバター サイズに縮小します。

ただし、PNG 画像のサイズを数ピクセル (83x83 -> 80x80 など) だけ変更すると、特に多数のエッジが定義された画像の場合、品質が大幅に低下する可能性があることに注意してください。これは、新しい画像には、元の画像の 4 ピクセルに [ほぼ] 均等に分割された多くのピクセルがあり、エッジがシャープな画像では、これがぼやけにつながるためです。

そのため、ポートレートに合わせて画像を縮小することは難しいだけでなく、品質も低下します。代わりにひげを切り落とします!

于 2009-09-10T01:16:36.750 に答える
0

私はこれを単純化しすぎているかもしれませんが、試してみてください:

  1. 合成前に顔の最大サイズの寸法を追跡します。

  2. 合成画像を一時ファイルに出力します。

  3. ステップ 1 からの最大値の二乗をトリミング

  4. トリミングされた画像部分のサイズを 80 x 80 に変更します

于 2009-09-10T00:51:30.150 に答える