RMagick удаляет белый фон с изображения и делает его прозрачным - PullRequest
11 голосов
/ 12 октября 2011

Мне нужно удалить белый фон с этого изображения и сделать фон прозрачным.Таким образом, это просто черная галочка на прозрачном фоне, экспортируемом в виде png.

например, Поворот

enter image description here

В

enter image description here

Есть идеи?

Ответы [ 3 ]

9 голосов
/ 12 октября 2011

convert image.png -matte -fill none -fuzz 1% -opaque white result.png

Заменяет все белое на прозрачное. Опция fuzz включает в себя все, что является почти белым.

2 голосов
/ 22 декабря 2016

Я знаю, что довольно поздно для вечеринки, но многое изменилось с тех пор, как этот вопрос был впервые опубликован, поэтому вот как вы можете сделать это сегодня, используя как минимум версию 2.15.4 из rmagick

Предполагается, что изображение где-то доступно:

image = Magick::Image.new(path_to_file)
image.background_color = 'none'

Если вы также хотите обрезать изображение, чтобы оно было настолько же большим, как его границы, просто используйте .trim!

image.trim!

EDIT:

Оказывается, решение, приведенное выше, действительно не работает для всех случаев использования. Более общее решение таково:

# the image needs to be in 'PNG' format
image.format = 'PNG'

# set a fuzz on the image depending on how accurate you want to be
image.fuzz = '10%'

# get the image background color
background_color = image.background_color

# convert pixels based on their color to being transparent
# the fuzz set above controls how accurate the conversion will be
image.paint_transparent(background_color)
1 голос
/ 22 апреля 2013

С v6.8.4-Q16 с помощью следующей команды:

convert nike.png -matte -fill none -fuzz 1% -opaque white nikeOutput.png

Результат:

enter image description here

Вот команда, которую я использую:

convert nike.jpg -transparent white NikeProd.png

enter image description here

enter image description here

...