Home >Backend Development >PHP Problem >How to change the color of pictures in php

How to change the color of pictures in php

藏色散人
藏色散人Original
2021-09-19 09:54:363077browse

How to modify the image color in php: 1. Create a PHP sample file; 2. Pass "img_replace_color('#000000','#f30145',"upload/001.png","upload/out. png");" method can replace the color in the picture.

How to change the color of pictures in php

#The operating environment of this article: Windows7 system, PHP7.1, Dell G3 computer.

How to change the color of pictures in php?

php Replace the color of the pixels in the picture

Replace a certain color in the picture with another color

The other colors will also be processed by yourself You can also remove and replace only the positive color

The background is transparent and the white background is not processed

//替换图片中的颜色
//img_replace_color('#000000','#f30145',"upload/001.png","upload/out.png" );
//255,255,255,127透明 0000黑 255,255,255,0白    [103,103,103,0 36,36,36,0灰色]
function img_replace_color($seachcolor,$replacecolor,$file,$outfile=''){
	$im=imagecreatefrompng($file);
	$newim = imagecreatetruecolor(imagesx($im), imagesy($im));//创建画布
	imagesavealpha($newim, true); //背景透明
	$background = imagecolorallocatealpha($newim, 255, 255, 255,127);   
	imagefill($newim,0,0,$background);//背景透明

	for ($y=0;$y<imagesy($im);$y++){
		for ($x=0;$x<imagesx($im);$x++) {
			$rgb = imagecolorat($im,$x,$y);
			$rgba = imagecolorsforindex ($im, $rgb);

			//echo &#39;[&#39;.$rgba[&#39;red&#39;].&#39;,&#39;.$rgba[&#39;green&#39;].&#39;,&#39;.$rgba[&#39;blue&#39;].&#39;,&#39;.$rgba[&#39;alpha&#39;].&#39;,&#39; .rgb2hex(&#39;rgb(&#39;.$rgba[&#39;red&#39;].&#39;,&#39;.$rgba[&#39;green&#39;].&#39;,&#39;.$rgba[&#39;blue&#39;].&#39;)&#39;) .&#39;]&#39;;

			//替换颜色
			$s_colr = hex2rgb($seachcolor);
			$r_colr = hex2rgb($replacecolor);
			if($rgba[&#39;red&#39;]==$s_colr[&#39;r&#39;] && $rgba[&#39;green&#39;]==$s_colr[&#39;g&#39;] && $rgba[&#39;blue&#39;]==$s_colr[&#39;b&#39;]  ){
				$rgba[&#39;red&#39;] = $r_colr[&#39;r&#39;];
				$rgba[&#39;green&#39;] = $r_colr[&#39;g&#39;];
				$rgba[&#39;blue&#39;] = $r_colr[&#39;b&#39;];
			}elseif($rgba[&#39;red&#39;]==255 && $rgba[&#39;green&#39;]==255 && $rgba[&#39;blue&#39;]==255 && $rgba[&#39;alpha&#39;]==127){
			}elseif($rgba[&#39;red&#39;]==255 && $rgba[&#39;green&#39;]==255 && $rgba[&#39;blue&#39;]==255 && $rgba[&#39;alpha&#39;]==0){
			}elseif($rgba[&#39;alpha&#39;]!=0){
			}else{
				//计算颜色
				$rgba[&#39;red&#39;] = $rgba[&#39;red&#39;]+ ( (255-$rgba[&#39;red&#39;])*$r_colr[&#39;r&#39;]  /255);//echo &#39;【&#39;.$s_colr[&#39;r&#39;].&#39;-&#39;.$r_colr[&#39;r&#39;].&#39;-&#39;.$rgba[&#39;red&#39;].&#39;】&#39;;
				$rgba[&#39;green&#39;] = $rgba[&#39;green&#39;]+ ( (255-$rgba[&#39;green&#39;])*$r_colr[&#39;g&#39;]  /255);
				$rgba[&#39;blue&#39;] = $rgba[&#39;blue&#39;]+ ( (255-$rgba[&#39;blue&#39;])*$r_colr[&#39;b&#39;]  /255);
			}

			$color = imagecolorallocatealpha($newim, $rgba[&#39;red&#39;], $rgba[&#39;green&#39;], $rgba[&#39;blue&#39;], $rgba[&#39;alpha&#39;]);


			imagesetpixel($newim, $x, $y, $color);//一个像素放入画布
		}
		//echo &#39;<hr>&#39;;
	}

	if($outfile){
		imagepng($newim , $outfile );
		imagedestroy($newim);
	}else{
		return $newim;
	}
}



/**
 * RGB转 十六进制
 * @param $rgb RGB颜色的字符串 如:rgb(255,255,255);
 * @return string 十六进制颜色值 如:#FFFFFF
 */
function rgb2hex($rgb){
	$regexp = "/^rgb\(([0-9]{0,3})\,\s*([0-9]{0,3})\,\s*([0-9]{0,3})\)/";
	$re = preg_match($regexp, $rgb, $match);
	$re = array_shift($match);
	$hexColor = "#";
	$hex = array(&#39;0&#39;, &#39;1&#39;, &#39;2&#39;, &#39;3&#39;, &#39;4&#39;, &#39;5&#39;, &#39;6&#39;, &#39;7&#39;, &#39;8&#39;, &#39;9&#39;, &#39;A&#39;, &#39;B&#39;, &#39;C&#39;, &#39;D&#39;, &#39;E&#39;, &#39;F&#39;);
	for ($i = 0; $i < 3; $i++) {
		$r = null;
		$c = $match[$i];
		$hexAr = array();
		while ($c > 16) {
			$r = $c % 16;
			$c = ($c / 16) >> 0;
			array_push($hexAr, $hex[$r]);
		}
		array_push($hexAr, $hex[$c]);
		$ret = array_reverse($hexAr);
		$item = implode(&#39;&#39;, $ret);
		$item = str_pad($item, 2, &#39;0&#39;, STR_PAD_LEFT);
		$hexColor .= $item;
	}
	return $hexColor;
}
/**
 * 十六进制 转 RGB
 */
function hex2rgb($hexColor) {
	$color = str_replace(&#39;#&#39;, &#39;&#39;, $hexColor);
	if (strlen($color) > 3) {
		$rgb = array(
			&#39;r&#39; => hexdec(substr($color, 0, 2)),
			&#39;g&#39; => hexdec(substr($color, 2, 2)),
			&#39;b&#39; => hexdec(substr($color, 4, 2))
		);
	} else {
		$color = $hexColor;
		$r = substr($color, 0, 1) . substr($color, 0, 1);
		$g = substr($color, 1, 1) . substr($color, 1, 1);
		$b = substr($color, 2, 1) . substr($color, 2, 1);
		$rgb = array(
			&#39;r&#39; => hexdec($r),
			&#39;g&#39; => hexdec($g),
			&#39;b&#39; => hexdec($b)
		);
	}
	return $rgb;
}

Related introduction:

PHP (PHP: Hypertext Preprocessor) is the "Hypertext Preprocessor" ”, is a scripting language executed on the server side, especially suitable for web development and can be embedded in HTML. PHP syntax learned the C language, absorbed the characteristics of multiple languages ​​​​of Java and Perl to develop its own unique syntax, and continued to improve itself based on their strengths, such as Java's object-oriented programming. The main goal of the language was originally created to make Developers quickly write high-quality web sites. PHP supports both object-oriented and process-oriented development, and is very flexible in use.

Recommended learning: "PHP Video Tutorial"

The above is the detailed content of How to change the color of pictures in php. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn