Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как увидеть индекс цвета, выдаваемый imageColorAt

Сообщения:  [1-10]   [11-13] 

 
 автор: sim5   (23.12.2007 в 13:07)   письмо автору
 
   для: Alex14   (23.12.2007 в 12:41)
 

Функции imageCreateTrueColor, как следует из мануала, требуется GD версии 2.0.1 или выше. Если GD не работает или не подключена - у вас вообще не будут работать функции работы с графикой.

   
 
 автор: Alex14   (23.12.2007 в 12:41)   письмо автору
 
   для: sim5   (22.12.2007 в 22:36)
 

Это наверное может случиться только если библиотека GD не работает.
Ну ладно, спасибо за информацию, сильно помогли с imageCreateTrueColor. Уже сделал что хотел.

   
 
 автор: sim5   (22.12.2007 в 22:36)   письмо автору
 
   для: Alex14   (22.12.2007 в 22:25)
 

Если русурс не будет создан, т.е. ошибка создания.

   
 
 автор: Alex14   (22.12.2007 в 22:25)   письмо автору
 
   для: sim5   (22.12.2007 в 21:04)
 

Знаю, что @ подавляет вывод. Спросил в каких случаях imageCreateTrueColor не работает.

   
 
 автор: sim5   (22.12.2007 в 21:04)   письмо автору
 
   для: Alex14   (22.12.2007 в 15:33)
 

Да, если не указан цвет прозрачности то его индес равен 0. @ подавляет вывод, в данном случае убрать ее, либо удалить вывод об ошибке.

   
 
 автор: Alex14   (22.12.2007 в 15:33)   письмо автору
 
   для: sim5   (22.12.2007 в 14:34)
 

Действительно, использование imageCreateTrueColor вместо imageCreate решает проблему. Но странно, что imageColorAt на это реагирует, ведь у меня задаётся цвет в пределах 24-х бит. Если бы открывалась готовая JPG-картинка с глубокими цветами, тогда это было бы понятно.

Картинка из памяти у меня уже была залита командой imageFilledRectangle (см. код выше). Прозрачность если не указана, то по-видимому принимается равной нулю и не выводится.

К чему @ перед imageCreateTrueColor и когда эта команда выдаёт false?

   
 
 автор: sim5   (22.12.2007 в 14:34)   письмо автору
 
   для: Alex14   (22.12.2007 в 13:30)
 

Если изображение может иметь альфа-канал, то да, допустим JPG не может содержать такого канала, а например формат TARGA (*.tga) может содержать такой канал как непосредственно в файле, так и в отдельном файле, но к веб этот формат отношения не имеет.
Что касается получения идекса цвета как вы хотите, то надо понимать, что $img у вас это ресурс (выделенная область памяти), а не реальное изображение. Поэтому вы можете получить индекс цвета некой координаты после того, как интересующая вас часть изображения будет, например залита, указанным вами цветом (область памяти ресурса будет изменена явно). Причем, как следует из мануала, нужно пользоваться функцией не imageсreate(), а imagecreatetruecolor():

<?
$im 
= @imagecreatetruecolor(100100) or die ("Error create image");
$color imagecolorallocate ($imRGB);
imagefill($im00$color);
echo 
imagecolorat($im1010);
?>

   
 
 автор: kasmanaft   (22.12.2007 в 14:33)   письмо автору
 
   для: Alex14   (22.12.2007 в 13:30)
 

Из мануала:
If PHP is compiled against GD library 2.0 or higher and the image is a truecolor image, this function returns the RGB value of that pixel as integer. Use bitshifting and masking to access the distinct red, green and blue component values.

То есть используйте imagecreatetruecolor().

Разбить этот int на составляющие можно вот так:
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;

(тоже из манула)

   
 
 автор: Alex14   (22.12.2007 в 13:30)   письмо автору
 
   для: sim5   (22.12.2007 в 13:15)
 


<?php
$w 
100$h 50;
$img imageCreate($w$h);
$bgcolor imageColorAllocate($img255210230);
imageFilledRectangle($img00$w$h$bgcolor);

echo 
imagecolorat($img1010);
?>

выдаст ноль

Нет, меня интересует именно содержаение индекса, результат команды imagecolorallocate, чтобы можно было с этим индексом совершать манипуляции.

Кстати, в него помимо цветовых координат RGB ещё и чётвёртый параметр входит - прозрачность.

   
 
 автор: sim5   (22.12.2007 в 13:15)   письмо автору
 
   для: Alex14   (22.12.2007 в 13:10)
 


<?
echo imagecolorat($img$x$y); 

PS. Если вас интересует то что вы обычно видите в HTML представлении (hex-представление), то пропустите imagecolorat через функцию dechex(). Индекс цвета это представляние трех основных цветов RGB от 0 до 255 т.е. #000000 - #FFFFFF, по одному байту на цвет.

   

Сообщения:  [1-10]   [11-13] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования