图片转素描
$image_path = "1.jpg";
$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');
imagejpeg($image);
imagedestroy($image);
function color_dodge($mask, $image)
{
$GAUSS_COUNT = 10;
$COLOR_STEP = 30;
$result = ($image === 255) ? $image : min(255, (($mask << 8 ) / (255 - $image)));
$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;
}
图片转字符
$image_path = "1.jpg";
$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)
{
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";
$im = imagecreatefromjpeg($image_path);
if (imageistruecolor($im)) {
imagetruecolortopalette($im, false, 256);
}
for ($i = 0; $i < imagecolorstotal($im); $i++) {
$rgb = imagecolorsforindex($im, $i);
$gray = round(0.229 * $rgb['red'] + 0.587 * $rgb['green'] + 0.114 * $rgb['blue']);
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');
imagejpeg($im);
imagedestroy($im);
图片转黑白
$image_path = "1.jpg";
$im = imagecreatefromjpeg($image_path);
if (imageistruecolor($im)) {
imagetruecolortopalette($im, false, 256);
}
for ($i = 0; $i < imagecolorstotal($im); $i++) {
$rgb = imagecolorsforindex($im, $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);
}
header('Content-Type: image/jpeg');
imagejpeg($im);
imagedestroy($im);