アルファ値を使用するバッファの imagecopyresampled に問題があります。どうやら、アルゴリズムはフィルタリングの前にピクセルのアルファ値を事前に乗算します。これにより、オブジェクトの周りに黒い境界線が生じます。
再現する手順:
RGB部分が完全に白で、アルファ部分の黒い背景に(アンチエイリアス処理された!!)白い円(正方形ではなく円を使用してください!)を持つ画像を撮ります(したがって、アルファ部分はほとんど完全に白と完全に黒のピクセル、およびアンチエイリアシングによる円の境界上のいくつかのグラデーション ピクセル - これは、入力画像が事前に乗算されていないことを意味します - 画像の RGB 部分が完全に白であるため、ストレート/マット化されていません)。
imagecopyresampled を使用して画像を半分に縮小します
完全に白い画像の上に結果を構成する
私が期待するもの:完全に白い画像
私が得るもの:円の輪郭の周りの灰色がかった境界線
これは、スケールダウン アルゴリズム内で事前に乗算されたアルファが原因であると確信しています (アルゴリズムは、新しい RGB 値を計算するために、ピクセルのアルファ値とその RGB 値を乗算します。したがって、白いピクセルはグレーになります)。
誰かがこれの回避策を知っていますか?