PHPで3つの画像を自動的に小さな画像に揃えてサイズを変更しますか?

StackOverflow https://stackoverflow.com/questions/1402867

  •  05-07-2019
  •  | 
  •  

質問

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

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

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

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

役に立ちましたか?

解決

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

必要に応じて、小さなアバターに表示する必要がある画像内の長方形を指定する各画像の追加データを保存できます。次に、作成するすべての画像でこれらの長方形の最大端を取り、それを小さなアバターのサイズに切り取ります。

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

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

他のヒント

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

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

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

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

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

  3. ステップ1で得られた最大値の二乗を切り取ります

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top