То, что вы хотите, довольно сложно, я не знаю, сработает ли это на всех изображениях, но это поможет вам продвинуться по пути:
<?php
$image_name = 'apple.png';
$img = imagecreatefrompng ( $image_name );
$size = getimagesize( $image_name );
if( $img ){
$new_image = colourable( $img , $size );
}
function colourable( $img , $size ) {
$new_img = imagecreate( $size[0] , $size[1] );
$white = imagecolorallocate( $new_img , 255 , 255 , 255 );
imagefill( $new_img , 0 , 0 , $white );
$black = imagecolorallocate( $new_img , 0 , 0 , 0 );
for( $x = 0; $x <= ( $size[0] - 1 ); $x++ ){
for( $y = 0; $y <= ( $size[1] - 1 ); $y++ ){
$pixel = imagecolorsforindex( $img, imagecolorat ( $img , $x , $y ) );
if( ( $pixel['red'] >= 0 && $pixel['red'] < 50 ) && ( $pixel['green'] >= 0 && $pixel['green'] < 50 ) && ( $pixel['blue'] >= 0 && $pixel['blue'] < 50 ) ){
imagesetpixel( $new_img , $x , $y , $black );
}
}
}
return $new_img;
}
header ( 'Content-Type: image/png' );
imagepng( $new_image );
?>
Это результат поставляемого изображения:
Он также работал с несколькими другими изображениями, некоторые хорошие, некоторые не очень хорошие, но поэкспериментируйте с ними и посмотрите, что вы можете сделать.Это довольно очевидно, но в основном он захватывает цвет каждого пикселя на изображении и проверяет, попадает ли он в код RGB черного цвета с некоторой погрешностью.(черный цвет 0, 0, 0).Он может быть точно настроен.
Он проверяет, попадают ли: RED & GREEN & BLUE между 0 и 50 по шкале rgb.
if( ( $pixel['red'] >= 0 && $pixel['red'] < 50 ) && ( $pixel['green'] >= 0 && $pixel['green'] < 50 ) && ( $pixel['blue'] >= 0 && $pixel['blue'] < 50 ) ){