0

画像関数のあらゆる種類の組み合わせを試してきましたが、これで良い結果が得られないようです。

画像を固定数のグレー レベルと透明度 (元の画像に存在する場合) に変換しようとしています。

トゥルーカラー画像とパレットベースの画像の両方を変換できる必要があります。

出力画像には...

  1. 純粋な黒 (0, 0, 0) と純粋な白 (255, 255, 255) を含む固定数のグレー レベル。
  2. ソース ピクセルが高レベルの透明度を持つ透明なピクセル。

私の主な問題は、imagetruecolortopalette の動作に関するものです。これは、パレットを減らしますが、その過程で透明度が常に失われるように見えます。

画像をピクセルごとにグレーレベルで分析し、パレットの色を選択してから画像をピクセルごとに再作成する、非常に長く複雑なコードを書くことになりましたが、かなり遅いので、もっと良い方法があります。

ご提案ありがとうございます。

4

1 に答える 1

0

私は約1年前にこのようなことをしようとしました。ただし、画像を黒または白のみに変換したため、作業は少し簡単になりました。

  • アルゴリズムは、古い画像と同じサイズの新しい画像を作成しました。
  • 次に、古いピクセルの各ピクセルを調べ、加重和によってその輝度を計算しました:
    0.2 R + 0.7 G + 0.1 B = 明るさ
  • 次に、明るさを使用して色を決定しました。
  • そして、新しい色が2番目の画像の対応するピクセルに書き込まれました

私が使用した画像には透明度がありませんでしたが、透明度の値を新しい画像にコピーするだけでよいと思います。透明度情報を失う方法がわかりません。アルファチャンネルを読み書きできませんでしたか?

当時、これを python で実装したところ、非常に高速に実行されました。1.000.000 ピクセルの処理に数秒かかりました。したがって、パフォーマンスの問題は、タスク自体ではなく、php に関連していると思います。さらに、最適化の余地はあまりないと思います。結局のところ、すべてのピクセルを見なければならないか、画像の解像度が失われます。処理自体はかなり単純です。

于 2012-12-05T10:16:41.553 に答える