Задача
Необходимо сделать один из цветов изображения прозрачным. Фон, на который накладывается изображение, просвечивает через прозрачную часть последнего.
Решение
Это делается с помощью функции ImageColorTransparent():
$color = ImageColorAllocate($image, $red, $green, $blue);
ImageColorTransparent($image, $color);
Обсуждение
И формат GIF и формат PNG поддерживают прозрачность, а формат JPEG не поддерживает. Для ссылки на прозрачный цвет в библиотеке GD предназначена константа IMG_COLOR_TRANSPARENT. Например, ниже показано, как начертить пунктирную линию, состоящую из чередующихся черных и прозрачных участков:
// чертим черно-белую пунктирную линию толщиной в два пиксела
$style = array($black, $black, IMG_COLOR_TRANSPARENT,
IMG_COLOR_TRANSPARENT);
ImageSetStyle($image, $style);
Для того чтобы определить текущие установки прозрачности, возьмите значение, возвращенное функцией ImageColorTransparent(), и передайте его функции ImageColorsForIndex():
$transparent = ImageColorsForIndex($image, ImageColorTransparent($image));
print_r($transparent);
Array
(
[red] => 255
[green] => 255
[blue] => 255
)
Функция ImageColorsForIndex() возвращает массив значений красной, зеленой и синей компонент цвета. В данном случае прозрачным является белый цвет.