Igor Ageyev
Новичок
загадочный transparent
Казалось бы простая задача - генерация gif файла с прозрачностью.
Допустим, требуется создать изображение 20х20 пикселей, верхняя половина которого должна быть прозрачной, а нижняя окрашена в желтый цвет (FFFF00)
Результат получается совершенно противоположный. прозрачной становится нижняя половина, т.е. та которая должна быть желтой.
Опытным путем я пришел к желаемому результату, но почему этот код работает никак не могу понять.
Если во вновь созданном изображении сначала назначить любой цвет прозрачным (с помощью imagecolortransparent), то фон всего изображения становится невидимым. Причем если в последующем закрашивать какую либо область изображения этим цветом, закрашиваемая область не будет прозрачной!!!
Привожу этот нелогичный, но решающий задачу, код:
Где грабли?
Казалось бы простая задача - генерация gif файла с прозрачностью.
Допустим, требуется создать изображение 20х20 пикселей, верхняя половина которого должна быть прозрачной, а нижняя окрашена в желтый цвет (FFFF00)
PHP:
$image = imagecreatetruecolor(20, 20); // создаем изображение 20х20 пикселей
$alpha = imagecolorallocate($image,255,0,0); // цвет который должен быть прозрачным
imagefill($image, 0, 0, $alpha); // закрашиваем все изображение
imagecolortransparent($image,$alpha); // делаем цвет $alpha прозрачным
$color = imagecolorallocate($image, 255, 255, 0); // цвет для нижней половины
imagefilledrectangle ($image, 0, 10, 20, 20, $color);// закрашиваем нижнюю половину
imagegif($image, "test.gif"); // сохраняем изображение
Опытным путем я пришел к желаемому результату, но почему этот код работает никак не могу понять.
Если во вновь созданном изображении сначала назначить любой цвет прозрачным (с помощью imagecolortransparent), то фон всего изображения становится невидимым. Причем если в последующем закрашивать какую либо область изображения этим цветом, закрашиваемая область не будет прозрачной!!!
Привожу этот нелогичный, но решающий задачу, код:
PHP:
$image = imagecreatetruecolor(20, 20); // создаем изображение 20х20 пикселей
$color = imagecolorallocate($image,255,255,0); // регистрируем желтый цвет
imagecolortransparent($image, $color); // делаем этот цвет прозрачным
imagefilledrectangle ($image, 0, 10, 20, 20, $color);// а теперь закрашиваем им половину изображения
imagegif($image, "test.gif"); // сохраняем изображение
