'imagecolorat' и прозрачност

Как е възможно да се получи стойността на прозрачност на пиксел на изображение?

'imagecolorat' избира само индекса на цвета на пиксела на посоченото място в изображението. С този индекс мога да получа RGB стойностите, но не и прозрачния.

Надяваме се, че разбирате и ви благодаря предварително.


person Roman    schedule 18.04.2011    source източник


Отговори (3)


Доколкото знам, стойността на прозрачност се връща от функцията imagecolorat. Бихте ли опитали:

$color        = imagecolorat($image, $x, $y);
$transparency = ($color >> 24) & 0x7F;

Прозрачността е цяло число между 0 и 127, така че трябва да маскираме първите 8 бита от 32-битовото цяло число на цвета.

person Stefan Gehrig    schedule 18.04.2011
comment
О благодаря! Не знаех, че imagecolorat всъщност съдържа алфа стойността. - person Roman; 18.04.2011
comment
Обърнете внимание, че 4-тият байт е за прозрачност, а не за непрозрачност. Така 0 означава напълно непрозрачен, а 127 означава напълно прозрачен. В други среди това може да бъде обърнато, например в css, където 0.0 е напълно прозрачен, а 1.0 е напълно непрозрачен. - person Marten Koetsier; 14.11.2018
comment
Колко голяма е 32-битова стойност? Тъй като imagecolorat връща 16777215. - person Edward; 17.08.2020

решението може да бъде следното:

$colorIndex = imagecolorat($img, $x, $y);
$colorInfo = imagecolorsforindex($img, $colorIndex);
print_r($colorInfo);

който ще отпечата нещо като:

Array
(
   [red] => 226
   [green] => 222
   [blue] => 252
   [alpha] => 0
)

където [алфа] е вашата стойност на прозрачност... (от 0 до 127, където 0 е напълно непрозрачен, а 127 е напълно прозрачен)

Наслади се!

person shadyyx    schedule 18.04.2011
comment
Да, съгласен съм. Благодаря за отговора. - person Roman; 18.04.2011
comment
хммм мислех, че алфа стойността е от 0 до 255, 0 означава прозрачно, а 255 означава непрозрачно - person user889030; 16.08.2017

Според ръководството на PHP imagecolorat връща индекса на цвета при посочените X/Y координати (предполагам, че това е за GIF и/или PNG-8).

Ако знаете индекса, тогава проблемът е да определите кой индекс във файла е прозрачен.

imagecolortransparent може да си струва да разгледате, imagecolorsforindex също може да бъде полезно.

person GordonM    schedule 18.04.2011