图片转素描这种技术,我们了解gd库的基础练习,使用场景比较少,但是会的话,总会让你在更多场合出彩;为我们的技术打下基础
$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;
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END