0

私のスクリプトは複数の画像を1つの画像に接着しますが、結果の画像は接着画像セットの最初の画像で単一の色が支配的です。

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

ただし、入力4の画像は異なる色(黄色、緑、青、赤)です。セットの最初の画像だけが正しく見えます。

$images = array();

foreach ($fileNames as $fileName) {
    $image = imagecreatefrompng($path . $fileName);
    if ($image) {
        $images[] = $image;
    }
}

// ...

$img = imagecreate($w, $h);

$x = 0;
foreach ($images as $image) {
    $width = imagesx($image);
    $height = imagesy($image);

    imagecopy($img, $image, $x, 0, 0, 0, $width, $height);
    $x += $width;
}

別の1つの例(接着剤セットの最初の画像が青で、他の画像が異なる色の場合):

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

4

1 に答える 1

2

おそらくパレット画像を混合しているので、パレットは最初の宛先画像から取得されます。

適切なサイズのTrueColor画像を作成し、すべての画像をその画像にimageCopyして、それらをTrueColorに変換します。

その後、わずかに「オフ」な色になる場合でも、宛先の画像をパレットに縮小してみてください。

$img = imageCreateTrueColor($w, $h);
// Add transparency management if needed

$x = 0;
foreach ($images as $image) {
    $width  = imagesx($image);
    $height = imagesy($image);    
    imagecopy($img, $image, $x, 0, 0, 0, $width, $height);
    $x += $width;
}
// Reduce image to non-dithered, 256-color paletted if needed
// imageTrueColorToPalette($img, False, 256);
于 2012-10-26T13:23:01.017 に答える