В ImageMagick, масштаб 1x1! Функция может быть использована для вычисления среднего значения без включения альфа, так что вы получите среднее значение только непрозрачных значений. Таким образом, вы можете сделать следующее:
Создание тестового прозрачного изображения:
convert logo: -transparent white logot.png
Вычислить средние значения:
convert logot.png -scale 1x1! -alpha off -format "%[fx:255*u.r], %[fx:255*u.g], %[fx:255*u.b]" info:
100.202, 81.4747, 98.6342
Кроме того, вы можете использовать альфа-канал в качестве маски для получения средств. Вы вычисляете среднее значение для каждого канала без альфа-канала, а фон под альфа-каналом устанавливается черным. Затем вычислите среднее значение альфа-канала. Затем разделите среднее значение каждого канала на среднее значение альфа-канала.
convert logo: -transparent white logot.png
convert logot.png -alpha extract alpha.png
means_rgb=$(convert logot.png -background black -alpha background -alpha off -format "%[fx:mean.r],%[fx:mean.g],%[fx:mean.b]" info:)
mean_r=$(echo $means_rgb | cut -d, -f1)
mean_g=$(echo $means_rgb | cut -d, -f2)
mean_b=$(echo $means_rgb | cut -d, -f3)
mean_alpha=$(convert alpha.png -format "%[fx:mean]" info:)
mean_r=$(convert xc: -format "%[fx:255*$mean_r/$mean_alpha]" info:)
mean_g=$(convert xc: -format "%[fx:255*$mean_g/$mean_alpha]" info:)
mean_b=$(convert xc: -format "%[fx:255*$mean_b/$mean_alpha]" info:)
echo "$mean_r, $mean_g, $mean_b"
100.203, 81.4768, 98.6362
Чтобы получить мин и макс, взяв реплику из идеи Марка Сетчелла:
convert logot.png -background black -alpha background -alpha off -format "%[fx:255*maxima.r], %[fx:255*maxima.g], %[fx:255*maxima.b]\n" info:
255, 250, 244
convert logot.png -background white -alpha background -alpha off -format "%[fx:255*minima.r], %[fx:255*minima.g], %[fx:255*minima.b]\n" info:
4, 0, 0