Похоже, что файлы PNG содержат информацию о цвете фона для прозрачных пикселей. Иногда это становится заметным при использовании этого изображения в качестве текстуры с неправильными настройками.
Как узнать в Linux (в идеале в командной строке) цвет прозрачных пикселей в PNG-файле?
решение1
Цвет фона передается с помощью фрагмента PNG «bKGD».
Из командной строки вы можете использовать "pngcheck -v". Загрузите и установите pngcheck с
http://www.libpng.org/pub/png/apps/pngcheck.html
затем введите
pngcheck -v file.png
Если в PNG-файле присутствует фрагмент bKGD, вывод pngcheck будет включать что-то вроде этого:
фрагмент bKGD со смещением 0x000a0, длина 6 красный = 0x00e0, зеленый = 0x00e0, синий = 0x0080
У вас, вероятно, уже есть ImageMagick (версии 6.6.9 или более поздней), поэтому вы также можете получить информацию о блоке bKGD, а также многое другое, набрав
identify -verbose file.png
и ищите
Цвет фона: srgba(224,224,128,1)
png:bKGD: найден фрагмент (см. Цвет фона выше)
Если отображается только «Цвет фона», но не «png:bKGD:...», то identify сообщает о цвете фона ImageMagick по умолчанию, а в файле PNG отсутствует фрагмент bKGD.
решение2
Спецификация PNG (связь) описывает фрагмент tRNS, в котором хранится информация о прозрачности.
Библиотека программного обеспеченияlibpngможет читать и записывать файлы PNG, включая информацию о прозрачности. В частности, найдите следующую функцию:
png_get_tRNS(png_ptr, info_ptr, &trans_alpha, &num_trans, &trans_color)