Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Графика > Цвет текста на картинке


Автор: K0SHKA 30.1.2009, 21:21
Доброго времени.. 
Простите меня глупую за такой вопрос. Но вот незнаю уже что делать.
Проблема в следующем, создаём изображение 

$img = imageCreateFromGif("Img.gif");

Далее устанавливаем цвет шрифта(как я поняла) 

$colour = imagecolorallocate($image, 0,255,255);

и пишем текст на картинке.

imagettftext($image, $size, $angle, $x, $y, $colour, $font,"GGG");

Проблема в том что когда картинка цветная то шрифт становиться почти равным цвету картинки(бэкграунда). И никакое значение imagecolorallocate() неможет повлиять на цвет пусть оно будет imagecolorallocate($img,0,0,0) или же imagecolorallocate($img,255,255,255)..

Как мне изменить цвет текста на фоне картинки, подскожите пожалуйста. smile 
Сборка сервера стандартная (DENWER).  

Автор: bars80080 30.1.2009, 22:37
в гифе используется зарезервированное число цветов и если ты выбираешь другой, то автоматом ищется ближайший. там должна быть ещё функция добавления цвета в саму картинку

Автор: ksnk 30.1.2009, 23:01
K0SHKA, Если в gif'е нет прозрачных областей, то все относительно просто  smile 
-- прочитать gif imagecreatefromgif 
-- узнать его габариты
-- создать картинку imagecreatetruecolor с размерами по габаритам 
-- скопировать гифку в эту картинку imagecopyresampled. использовать другие функции копирования - опасно для здоровья smile
-- написать на картинке то, чего нужно

А вот когда есть прозрачные области, то совсем не так просто  smile 

Автор: skyboy 30.1.2009, 23:06
Цитата(bars80080 @  30.1.2009,  21:37 Найти цитируемый пост)
должна быть ещё функция добавления цвета в саму картинку 

http://php.net/imagecolorallocate smile
вообще говоря, после изучения http://ua.php.net/imagecolorallocate(что советую в подобных случаях делать в первую очередь), возникают мысли:
Цитата

The first call to imagecolorallocate() fills the background color in palette-based images - images created using imagecreate(). 

Если я правильно понимаю, возможно, первый вызов выбирает уже существующий цвет с кодом 0 из палитры картинки. И тогда цвет выводимого шрифта действительно совпадет с цветом фона.
Цитата(http://ua.php.net/manual/ru/function.imagecolorallocate.php#78726)

When working on an existant GIF images, if the number of different colours has reached the limits of the GIF format, imagecolorallocate will not use to the colour you ask her within the parameters, she will apply black !

Возможно, человек имеет в виду не черный цвет, а, опять же, компонент палитры с цветом ноль - т.е. то, что скорее всего выступает цветом фона.
Эти предположения требуют проверки, которые я провести не могу сейчас. Так что прошу отнестись с должным скепсисом.

Автор: unicross 30.1.2009, 23:07
Цитата(bars80080 @  30.1.2009,  22:37 Найти цитируемый пост)
 то автоматом ищется ближайший

Не ищется! Функция imagecolorallocate() просто возвращает False, если невозможно добавить новый цвет.

Код

<?php
header("Content-type: image/gif");
$img = imageCreateFromGif("img.gif");
if (imagecolorstotal($img) == 256) { // Максимальное количество
   $red = imagecolorclosest($img, 255, 0, 0);
   $str = 'Ближайший';
}
else {
   $red = imagecolorallocate($img, 255, 0, 0);
   $str = 'Красный';
}
$fontfile = 'C:/Windows/Fonts/arial.ttf';
$str = iconv('windows-1251', 'UTF-8', $str);
imagettftext($img, 20, 0, 25, 25, $red, $fontfile, $str);
imagegif($img);
imagedestroy($img);
?>


Если вместо цвета передать False, то будет цвет с #0
Код

imagettftext($img, 20, 0, 25, 25, false, $fontfile, $str);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)