PHP - görüntü içinde rengini değiştirme

2 Cevap php

Birisi yardımcı olabilir umuyoruz,

Ben maskeleri görüntüler ... ancak ('yeşil ekran' tarzı) ile maskelemek için bir renk güvenen bir komut yaptık. Ben maskeleme am görüntü harap olduğunu renk içeriyorsa sorun.

Ne yapmam için arıyorum görüntü böyle 0,0,254 gibi benzer bir renk ile benim anahtarlama renk (0,0,255) herhangi bir durum oluşmasına yerine maskeleme önce olmaktadır.

Ben gif ya da endeksli PNG olarak 256 renk etrafında dayalı bir kaç çözüm bulduk ..

Yani benim soru bir gif veya png 256 ardından indeksi üzerinden bakmak ve rengi değiştirmek veya arama yoluyla ve her pikselin renklerini değiştirmek dönüştürmek için daha verimli olacaktır aynı zamanda.

Teşekkürler,

2 Cevap

Sen girdi dosyası açın ve chromokey değeri kontrol etmek için her bir pikseli taramak gerekir.

Böyle bir şey:

// Open input and output image
$src = imagecreatefromJPEG('input.jpg') or die('Problem with source');
$out = ImageCreateTrueColor(imagesx($src),imagesy($src)) or die('Problem In Creating image');

// scan image pixels
for ($x = 0; $x < imagesx($src); $x++) {
    for ($y = 0; $y < imagesy($src); $y++) {
    	$src_pix = imagecolorat($src,$x,$y);
    	$src_pix_array = rgb_to_array($src_pix);

            // check for chromakey color
            if ($src_pix_array[0] == 0 && $src_pix_array[1] == 0 && $src_pix_array[2] == 255) {
                $src_pix_array[2] = 254;
            }


    	imagesetpixel($out, $x, $y, imagecolorallocate($out, $src_pix_array[0], $src_pix_array[1], $src_pix_array[2]));
    }
}


// write $out to disc

imagejpeg($out, 'output.jpg',100) or die('Problem saving output image');
imagedestroy($out);

// split rgb to components
function rgb_to_array($rgb) {
    $a[0] = ($rgb >> 16) & 0xFF;
    $a[1] = ($rgb >> 8) & 0xFF;
    $a[2] = $rgb & 0xFF;

    return $a;
}

İşte ilk 256 palete dönüştürür rengi değiştirmek çözümdür:

//Open Image
$Image = imagecreatefromJPEG('input.jpg') or die('Problem with source');

//set the image to 256 colours
imagetruecolortopalette($Image,0,256);

//Find the Chroma colour
$RemChroma = imagecolorexact( $Image,  0,0,255 );

//Replace Chroma Colour
imagecolorset($Image,$RemChroma,0,0,254);

//Use function to convert back to true colour
imagepalettetotruecolor($Image);




function imagepalettetotruecolor(&$img)
    {
        if (!imageistruecolor($img))
        {
            $w = imagesx($img);
            $h = imagesy($img);
            $img1 = imagecreatetruecolor($w,$h);
            imagecopy($img1,$img,0,0,0,0,$w,$h);
            $img = $img1;
        }
    }

Bu kayıpsız olarak ben şahsen radio4fans çözümü tercih, ancak hızı hedef ise bu üstündür.