Intereting Posts
Laravel 5: перенаправление на внешнюю ссылку outisde localhost / server Как перенаправить несуществующий подкаталог в файл index.php, сохраняя URL-адрес Сообщение JQuery AJAX для PHP Разница между getcwd () и dirname (__ FILE__)? Что я должен использовать? Я только что написал над своим WAMP index.php! Кто-нибудь знает, как я могу получить другую копию без повторной установки WAMP Какой обмен сообщениями об ошибках я могу вставить в этот скрипт, чтобы выяснить проблему curl POST-формат для CURLOPT_POSTFIELDS CodeIgniter: неправильно загружать файл mime type Ограничить пользователя от несанкционированного доступа Загрузка файла с помощью XMLHttprequest – Отсутствует граница в multipart / form-data Как создать вращающийся файл журнала с помощью Laravel и Monlog Разрешения установлены на 777 и файл все еще не доступен для записи как отправить HTML-письмо с встроенным прикрепленным изображением с помощью PHP Элементы подсчета в каждом вспомогательном массиве в php Как добавить переменную GET в текущий URL?

PHP – Заменить цвет в изображении

Я надеюсь, что кто-то может помочь,

Я создал сценарий, который маскирует изображения … однако он зависит от цвета, маскирующего (стиль «зеленого экрана»). Проблема в том, что изображение, которое я маскирую, содержит этот цвет, он разрушен.

То, что я хочу сделать, это до маскировки изображения заменить любое появление моего ключевого цвета (0,0,255) с таким же цветом, как 0,0254.

Я нашел несколько решений, основанных на gif или 256 цветных PNG, поскольку они индексируются ..

Поэтому мой вопрос заключается в том, будет ли более эффективным преобразовать его в gif или 256 png, затем просмотрите индекс и замените цвет или выполните поиск по каждому пикселю и замените цвета.

Благодаря,

Вам нужно открыть входной файл и проверить каждый пиксель, чтобы проверить его значение.

Что-то вроде этого:

// 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; } 

Вот замена цветового решения, которое сначала преобразует в 256 паллет:

 //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; } } 

Я лично предпочитаю решение radio4fans, поскольку оно без потерь, но если скорость – это ваша цель, это лучше.