当前位置: 移动技术网 > IT编程>网页制作>技巧 > GD库实例1

GD库实例1

2020年07月17日  | 移动技术网IT编程  | 我要评论

图片转素描

$image_path = "1.jpg";

// $image_path="2.png";
$im_gray = imagecreatefromjpeg($image_path);
 
$width = imagesx($im_gray);
$height = imagesy($im_gray);
//对图像使用过滤器 
imagefilter($im_gray, IMG_FILTER_GRAYSCALE);
 //用于创建画布
$im_invert = imagecreatetruecolor($width, $height);
//在画布中绘制图像
imagecopy($im_invert, $im_gray, 0, 0, 0, 0, $width, $height);
//对图像使用过滤器 
imagefilter($im_invert, IMG_FILTER_NEGATE);
imagefilter($im_invert, IMG_FILTER_GAUSSIAN_BLUR);
  //这个算法最后再给出
$image = color_dodge_blend($im_gray, $im_invert, $width, $height);
 
header('Content-Type: image/jpeg');
//设置图片类型,同样如果想生成gif或者png图象,要替换成相应的头
imagejpeg($image);
//输出图象,如果是gif就用imagegif,如果是png就用imagepng……
imagedestroy($image); 
 function color_dodge($mask, $image)
{
      $GAUSS_COUNT = 10;
  $COLOR_STEP = 30;
	$result = ($image === 255) ? $image : min(255, (($mask << 8 ) / (255 - $image)));
	//$result = ($result <= 210) ? 0 : $result;
// 		var_dump($result,$COLOR_STEP);die;
	$result = (int) ($result / $COLOR_STEP) * $GAUSS_COUNT;

	return $result;
}
 
 function kmax1($array)
{
	return array_search(max($array), $array);
}
 
  function color_dodge_blend($source, $layer, $width, $height)
{
 //用于创建画布
	$image = imagecreatetruecolor($width, $height);
	$color_array = array();
	for ($x = 0; $x < $width; $x++)
	{
		for ($y = 0; $y < $height; $y++)
		{
		//计算灰度
			$rgb = ImageColorAt($source, $x, $y);
			$r = ($rgb >> 16) & 0xFF;
			$g = ($rgb >> 8) & 0xFF;
			$b = $rgb & 0xFF;
 
			$rgb2 = ImageColorAt($layer, $x, $y);
			$r2 = ($rgb2 >> 16) & 0xFF;
			$g2 = ($rgb2 >> 8) & 0xFF;
			$b2 = $rgb2 & 0xFF;
 
			$r = color_dodge($r, $r2);
			$g = color_dodge($g, $g2);
			$b = color_dodge($b, $b2);
 			
			$rgb = ($r << 16) | ($g << 8) | $b;
			$color_array[$rgb] = key_exists($rgb, $color_array) ? $color_array[$rgb] + 1 : 1;
			//在指定的坐标处绘制像素。
			imagesetpixel($image, $x, $y, $rgb);
		}
	}
 
	$background = kmax1($color_array);
 
	for ($x = 0; $x < $width; $x++)
	{
		for ($y = 0; $y < $height; $y++)
		{
		//获取颜色
			$rgb = ImageColorAt($image, $x, $y);
			if ($rgb === $background)
			{
					//在指定的坐标处绘制像素。
			    	imagesetpixel($image, $x, $y, 0xFFFFFF);
			}
		}
	}
 
	return $image;
}

图片转字符

//图片转字符
// $lei->color_dodge_blend($im,2,$width,$height);
$image_path = "1.jpg";
// $image_path="2.png";
$im = imagecreatefromjpeg($image_path);
  
$imgWidth = imagesx($im);
$imgHeight = imagesy($im);

for($i=0;$i<$imgHeight;$i++)
for($j=0;$j<$imgWidth;$j++)
{
    $rgb = ImageColorAt($im, $j,$i);
    $r=($rgb>>16);        //取得红色分量
    $g=($rgb&0x00ff00)>>8; //取得绿色分量
    $b=$rgb&0x0000ff;      //取得蓝色分量
$t=($r*3+$g*6+$b)/10;//转成灰度
$t=floor($t); 
if($t<25)                 //输出ascii
{
  echo "@";
}else if($t<50)
{
  echo "B";
}else if($t<75)
{
  echo "A";
}else if($t<100)
{
  echo "@";
}else if($t<125)
{
  echo "9";
}else if($t<150)
{
  echo "*";
}else if($t<175)
{
  echo "+";
}else if($t<200)
{
  echo ";";
}else if($t<=225)
{
  echo ",";
}else{
  echo ".";
}
if($j>$imgWidth-2)       //跟着图片换行
echo "\r\n";         
}
die;

图片转黑白灰

// 黑白灰
$image_path = "1.jpg";
// $image_path="2.png";
$im = imagecreatefromjpeg($image_path);
//如果是Gif用imagecreatefromgif,PNG用imagecreatefrompng……
if (imageistruecolor($im)) {
    imagetruecolortopalette($im, false, 256);
    //如果是真彩色图象,将真彩色图像转换为调色板图像
}
for ($i = 0; $i < imagecolorstotal($im);/*获得调色板中颜色的数目*/ $i++) {
    
    //获得颜色i点的颜色值
    $rgb = imagecolorsforindex($im, $i);
    
    //获得颜色灰度值
    $gray = round(0.229 * $rgb['red'] + 0.587 * $rgb['green'] + 0.114 * $rgb['blue']);
    //设置i点颜色值
     
     if ($gray <= 150){
        $gray = $gray+50;
    }else if ($gray <= 200){
        $gray = $gray+40;
    }else if ($gray <= 218){
        $gray = $gray+30;
    }else  if ($gray <= 240){
        $gray = $gray+10;
    } else  if ($gray <= 250){
        $gray = $gray+5;
    } else{
         $gray = 255;
    } 
    imagecolorset($im, $i, $gray, $gray, $gray);
}
header('Content-Type: image/jpeg');
//设置图片类型,同样如果想生成gif或者png图象,要替换成相应的头
imagejpeg($im);
//输出图象,如果是gif就用imagegif,如果是png就用imagepng……
imagedestroy($im);
//销毁图象,释放资源

图片转黑白

//转黑白
$image_path = "1.jpg";
// $image_path="2.png";
$im = imagecreatefromjpeg($image_path);
//如果是Gif用imagecreatefromgif,PNG用imagecreatefrompng……
if (imageistruecolor($im)) {
    imagetruecolortopalette($im, false, 256);
    //如果是真彩色图象,将真彩色图像转换为调色板图像
}
for ($i = 0; $i < imagecolorstotal($im);/*获得调色板中颜色的数目*/ $i++) {
    $rgb = imagecolorsforindex($im, $i);//获得颜色i点的颜色值
    $gray = round(0.229 * $rgb['red'] + 0.587 * $rgb['green'] + 0.114 * $rgb['blue']);
    //获得颜色灰度值
    if ($gray <= 128) $gray = 0; else $gray = 255;
    imagecolorset($im, $i, $gray, $gray, $gray);//设置i点颜色值
}
header('Content-Type: image/jpeg');
//设置图片类型,同样如果想生成gif或者png图象,要替换成相应的头
imagejpeg($im);
//输出图象,如果是gif就用imagegif,如果是png就用imagepng……
imagedestroy($im);
//销毁图象,释放资源
 

本文地址:https://blog.csdn.net/wangzhae/article/details/107379850

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网