55 lines
1.4 KiB
PHP
55 lines
1.4 KiB
PHP
define('src_name', 'input.jpg'); // source image
|
|
define('dest_name', 'output.jpg'); // destination image
|
|
|
|
$img = imagecreatefromjpeg(src_name); // read image
|
|
|
|
if(empty($img)){
|
|
echo 'Image could not be loaded!';
|
|
exit;
|
|
}
|
|
|
|
$black = imagecolorallocate($img, 0, 0, 0);
|
|
$white = imagecolorallocate($img, 255, 255, 255);
|
|
$width = imagesx($img);
|
|
$height = imagesy($img);
|
|
|
|
$array_lum = array(); // for storage of luminosity of each pixel
|
|
$sum_lum = 0; // total sum of luminosity
|
|
$average_lum = 0; // average luminosity of whole image
|
|
|
|
for($x = 0; $x < $width; $x++){
|
|
for($y = 0; $y < $height; $y++){
|
|
// read pixel value
|
|
$color = imagecolorat($img, $x, $y);
|
|
$r = ($color >> 16) & 0xFF;
|
|
$g = ($color >> 8) & 0xFF;
|
|
$b = $color & 0xFF;
|
|
// save pixel luminosity in temporary array
|
|
$array_lum[$x][$y] = ($r + $g + $b);
|
|
// add pixel luminosity to sum
|
|
$sum_lum += $array_lum[$x][$y];
|
|
}
|
|
}
|
|
|
|
// calculate average luminosity
|
|
$average_lum = $sum_lum / ($width * $height);
|
|
|
|
for($x = 0; $x < $width; $x++){
|
|
for($y = 0; $y < $height; $y++){
|
|
// pixel is brighter than average -> set white
|
|
// else -> set black
|
|
if($array_lum[$x][$y] > $average_lum){
|
|
imagesetpixel($img, $x, $y, $white);
|
|
}
|
|
else{
|
|
imagesetpixel($img, $x, $y, $black);
|
|
}
|
|
}
|
|
}
|
|
// save black and white image to dest_name
|
|
imagejpeg($img, dest_name);
|
|
|
|
if(!file_exists(dest_name)){
|
|
echo 'Image not saved! Check permission!';
|
|
}
|