6

PHPを使用して別の画像から画像を作成しようとしています。これが私のコードです:

<?php
    $width = 109;
    $height = 109;
    $image = imagecreatetruecolor($width, $height);
    $source_under = imagecreatefrompng('ecloid_under.png');
    $black = imagecolorallocate($image, 0x00, 0x00, 0x00);

    imagecolortransparent($image, $black);

    imagecopy($image, $source_under, 0, 0, 0, 0, $width, $height);

    header('Content-type: image/png');
    imagepng($image);
    imagedestroy($image);
?>

だから私はこの画像をロードしています$source_under

ここに画像の説明を入力してください

透明な空白の「キャンバス」画像にコピーします。その操作の結果は次のとおりです。

ここに画像の説明を入力してください

ご覧のとおり、初期画像全体の周りに一種の黒い境界線があります。これは、最初は「帆布」の画像がすべて黒だったためだと思います。したがって、画像の透明度とアンチエイリアシングに問題があります。

同様の問題が発生するのはこれが初めてではありませんが、前回はソース画像が原因でした。今回は、Photoshopで開いても、潜在的な問題は表示されません。

誰かがこれを修正する方法を知っていますか?

4

2 に答える 2

9

オリジナルをコピーする前に、$imageでアルファブレンディングを有効にしてみてください。

imagealphablending($image, true); 

2番目の試みは、透明な色を作成し、コピーの前に$imageをその色で塗りつぶすことです。

$transparent = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $transparent);
imagealphablending($image, true); 
于 2012-07-23T21:19:48.330 に答える
3

ソース画像のエッジの周りに部分的な透明度があります。これにより、キャンバス画像の黒(100%透明であるため、通常は表示されません)と組み合わされて、表示される結果が得られます。これを回避するには、ソース画像のアルファチャネル全体が100%または0%であることを確認するか、キャンバス画像のより適切なベースカラー(つまり、サイトの背景カラースキームに一致するもの)を選択します。

Fabio Anselmoのコメントは、GIFに実際のアルファチャネルがないという点で役立ちます-GIFの透明度はオールオアナッシングです-したがって、1つとして保存すると100%または0%のソリューションが達成されます。非常に注意しない限り、画像のアンチエイリアシングの結果として、ソース画像のすぐそこに「境界線」が表示されます。これは、使用している背景色またはGIF変換で選択した背景色で構成されます。(ただし、インターレース部分は関係ありません。)

于 2012-07-23T21:08:12.583 に答える