Я ищу способ преобразования изображения, чтобы все непрозрачные пиксели (те, которые имеют альфа! = 1) в черные и прозрачные пиксели не были затронуты (или преобразованы в белый) , Самое близкое, что я получил, было с помощью команды imagemagick ниже:
convert <img> -colorspace Gray <out>
Однако это все же дает мне немного серого цвета вместо полного черного. Я перепробовал все варианты цветового пространства, и ни один из них не справился с работой.
Любая идея, как мне этого добиться с помощью imagemagick или с помощью аналогичных инструментов (или с помощью библиотеки PHP, если она существует)
Я не уверен, поможет ли это вам (т.е. оставят ли представленные методы прозрачные пиксели в покое), но проверьте ответы на этот вопрос: PHP/ImageMagic Получить «тень» изображения
Ну, вы можете сделать это с помощью GD и пары циклов:
$img = imagecreatefromstring(file_get_contents($imgFile));
$width = imagesx($img);
$hieght = imagesy($img);
$black = imagecolorallocate($img, 0, 0, 0);
$white = imagecolorallocate($img, 255, 255, 255);
for ($x = 0; $x < $width; $x++) {
for ($y = 0; $y < $width; $y++) {
$color = imagecolorat($img, $x, $y);
$color = imagecolorforindex($color);
if ($color['alpha'] == 1) {
imagesetpixel($img, $x, $y, $black);
} else {
imagesetpixel($img, $x, $y, $white);
}
}
}
Или вы можете заменить цвета (это может работать, а может и не работать):
$img = imagecreatefromstring(file_get_contents($imgFile));
$maxcolors = imagecolorstotal($img);
for ($i = 1; $i <= $maxcolors; $i++) {
$color = imagecolorforindex($i);
if ($color['alpha'] == 1) {
imagecolorset($img, $i, 0, 0, 0);
} else {
imagecolorset($img, $i, 255, 255, 255);
}
}