Perl GD Проверьте, прозрачен ли пиксель
Я пытался решить это некоторое время. Я должен проверить, является ли данный пиксель (х, у) полностью прозрачным.
1. Как извлечь альфа-канал из заданного пикселя? Наличие альфа-канала 127 будет означать, что пиксель прозрачен? 2. Я протестировал следующий код на прозрачном пикселе, и он создает комбинацию RGB действительно темного (почти черного) цвета. Я мог бы использовать это как индикатор, но мне нужен более точный способ.
my $myImage = newFromPng GD::Image($path);
$myImage->saveAlpha(1);
my $index = $myImage->getPixel($x,$y);
my ($red,$green,$blue) = $myImage->rgb($index);
1 ответ
Я нашел решение, которое, кажется, работает правильно:
my $index = $myImage->getPixel($x,y);
вернет цветовую палитру. Диапазон цветовой палитры зависит от режима, в котором открыто изображение. Если это TrueColor(24-битный RGB-16 777 216 цветов), который представляет собой максимальное количество цветов, распознаваемых человеческим глазом, и максимальное количество практически используемых цветов, максимальное номер палитры будет 16 777 215. Когда функция вызывается для "прозрачного" пикселя, возвращаемое число превышает 2 миллиарда, что является недопустимым числом для 24-битного цвета RGB. Итак, одна простая проверка:
if ($index >= 1<<24) {
#The pixel is transparent
}
сделал трюк для меня.