Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menukar warna gambar dalam php

Bagaimana untuk menukar warna gambar dalam php

藏色散人
藏色散人asal
2021-09-19 09:54:363048semak imbas

Cara mengubah suai warna imej dalam PHP: 1. Buat fail contoh PHP 2. Lulus "img_replace_color('#000000','#f30145',"upload/001.png"," upload/out. png");" kaedah boleh menggantikan warna dalam gambar.

Bagaimana untuk menukar warna gambar dalam php

Persekitaran pengendalian artikel ini: sistem Windows 7, PHP7.1, komputer Dell G3.

Bagaimana untuk menukar warna gambar dalam PHP?

php Gantikan warna piksel dalam gambar

Tukarkan warna tertentu dalam gambar dengan warna lain

Warna lain juga akan diproses sendiri Anda juga boleh mengalih keluar dan menggantikan warna positif sahaja

Latar belakang, latar belakang lutsinar dan putih tidak diproses

//替换图片中的颜色
//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;
}

Pengenalan berkaitan:

PHP (PHP : Hypertext Preprocessor) ialah "Hypertext Preprocessor" "Processor" ialah bahasa skrip yang dilaksanakan pada bahagian pelayan, terutamanya sesuai untuk pembangunan web dan boleh dibenamkan dalam HTML. Sintaks PHP mempelajari bahasa C, menyerap ciri berbilang bahasa Java dan Perl untuk membangunkan sintaks uniknya sendiri, dan terus memperbaiki dirinya berdasarkan kekuatan mereka, seperti pengaturcaraan berorientasikan objek Java bahasa pada asalnya dicipta untuk membuat Pembangun menulis tapak web berkualiti tinggi dengan cepat. PHP menyokong pembangunan berorientasikan objek dan proses, dan sangat fleksibel digunakan.

Pembelajaran yang disyorkan: "Tutorial Video PHP"

Atas ialah kandungan terperinci Bagaimana untuk menukar warna gambar dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn