Преобразовать непрозрачные пиксели в черный

Я ищу способ преобразования изображения, чтобы все непрозрачные пиксели (те, которые имеют альфа! = 1) в черные и прозрачные пиксели не были затронуты (или преобразованы в белый) , Самое близкое, что я получил, было с помощью команды imagemagick ниже:

convert <img> -colorspace Gray <out>

Однако это все же дает мне немного серого цвета вместо полного черного. Я перепробовал все варианты цветового пространства, и ни один из них не справился с работой.

Любая идея, как мне этого добиться с помощью imagemagick или с помощью аналогичных инструментов (или с помощью библиотеки PHP, если она существует)

6
задан CraigTeegarden 6 April 2013 в 20:09
поделиться

2 ответа

Я не уверен, поможет ли это вам (т.е. оставят ли представленные методы прозрачные пиксели в покое), но проверьте ответы на этот вопрос: PHP/ImageMagic Получить «тень» изображения

1
ответ дан 8 December 2019 в 04:07
поделиться

Ну, вы можете сделать это с помощью 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);
    }
}
1
ответ дан 8 December 2019 в 04:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: