Intereting Posts
Аутентификация безопасности Symfony Подсчет количества конкретных символов внутри строки Возможно ли создать файл * .sh с помощью PHP CLI и получить доступ к экспортированным Env vars в PHP-скрипте? Как вывести это значение JSON, где ключ начинается с числа? Как объединить два массива без повторных значений? Многоуровневое предложение WHERE в CodeIgniter PHP: объединение записей в Active records Как получить целое число из одной даты в другую в PHP Значения форм пусты (не значение) после визуализации виджета в форме Добавить и обновить строку в базе данных С Doctrine, какие преимущества от использования DQL над SQL? Как получить значение SUM в массиве? Как вставить данные в таблицу1 с полем проверки из таблицы2 (Codeigniter) (обновлено) отправить ссылку, используя функцию php mail () Как я могу предотвратить загрузку страницы, если нет javascript, но с использованием php вместо <noscript>?

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

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

convert <img> -colorspace Gray <out> 

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

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

Я знаю, что этот вопрос старый, но теперь я наткнулся на него, я мог бы ответить на него.

Команда ImageMagick, которую вы хотите, это:

 convert <img> -alpha extract -threshold 0 -negate -transparent white <out> 

Я буду разбивать, что это делает.

  1. -alpha extractВозьмите альфа-маску изображения. Полностью прозрачные пиксели будут черными, полностью непрозрачными – белыми.
  2. -threshold 0 – Увеличить все каналы до их максимального значения, если они больше нуля. В этом случае он будет делать каждый пиксель белого цвета, кроме тех, которые полностью черные .
  3. -negateИнвертировать изображение . Теперь наши черные белые, а белые – черные.
  4. -transparent white Установите белые пиксели в прозрачные . Это можно исключить, если вы предпочтете, чтобы ваши первоначальные прозрачные пиксели были белыми.

До

Изображение PNG с альфа-каналом

После

Предыдущее изображение после запуска команды convert

Я не уверен, поможет ли это вам (т. Е. Будут ли представленные методы оставлены только прозрачными пикселями), но проверьте ответы на этот вопрос: 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); } }