Есть ли у меня обнаружение прозрачных пикселей на изображении с помощью rmagick? - PullRequest
0 голосов
/ 12 марта 2019

Я использую Rmagick для создания иконок для iOS.И для этого мне нужно убрать прозрачность.Сейчас я деактивирую альфа-канал и сглаживаю все изображения.Вот код, который я использую для этого.

app_store_icon = ImageList.new(app_store_icon_url)
app_store_icon.alpha(DeactivateAlphaChannel)
app_store_icon.flatten_images

Но я бы хотел избежать этих ненужных шагов, если пользователь загружает правильное изображение png без прозрачности.Так как же проверить, есть ли прозрачность на изображении, и выполнять вышеперечисленные операции только при необходимости?

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

В командной строке Imagemagick извлеките альфа-канал и проверьте, если его среднее значение меньше 1. Если это так, то у него есть прозрачность.Если ровно 1, то прозрачности нет.

value=$(convert image -alpha extract -format "%[fx:mean]" info:)

or

value=$(convert image -alpha extract -scale 1x1! -format "%[fx:u]" info:)

if [ "$value" = 1 ]; then
echo "opaque"
else
echo "transparent"
fi

Извините, я не знаю RMagick.

0 голосов
/ 12 марта 2019

Попробуйте, если этот способ вам подходит: скомбинируйте изображение с белым фоном размера изображения.Например, учитывая изображение альфа-канала img.png:

require 'rmagick'
include Magick

image = Magick::Image.read("img.png").first
w = image.columns
h = image.rows

if image.alpha?
  bg = Image.new(w,h) { self.background_color = "white" } # create a white background
  image = bg.composite(image, NorthWestGravity, 0, 0, OverCompositeOp) # compose
end

image.write("img_out.png")

Ищите постоянные rmagick .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...