主要是利用灰度公式算出每个像素点的灰度,然后灰度低于平均值的输出0高于的输出1,就能得到文字显示了。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body{
font-size: 5px;
}
</style>
</head>
<body>
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2017/10/10
* Time: 17:34
*/
$filename = 'first.jpg';
$img = imagecreatefromjpeg($filename);
$width = imagesx($img);
$height = imagesy($img);
$sum = 0;
$cnt = 0;
for ($x = 0;$x < $width;$x++){
for($y = 0;$y < $height;$y++){
$rgb = ImageColorAt($img, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$sum += 0.2126 * $r + 0.7152 * $g + 0.0722 * $b;
$cnt++;
}
}
$ave = $sum / $cnt;
//计算平均值
for($y = 0;$y < $height;$y++){
for ($x = 0;$x < $width;$x++){
$rgb = ImageColorAt($img, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
//灰度计算公式
if (0.2126 * $r + 0.7152 * $g + 0.0722 * $b > $ave){
echo '1';
}else{
echo '0';
}
````
}
echo '<br/>';
}
?>
</body>
</html>
原图
效果