|
|
|
|
|
для: Alex14
(23.12.2007 в 12:41)
| | Функции imageCreateTrueColor, как следует из мануала, требуется GD версии 2.0.1 или выше. Если GD не работает или не подключена - у вас вообще не будут работать функции работы с графикой. | |
|
|
|
|
|
|
|
для: sim5
(22.12.2007 в 22:36)
| | Это наверное может случиться только если библиотека GD не работает.
Ну ладно, спасибо за информацию, сильно помогли с imageCreateTrueColor. Уже сделал что хотел. | |
|
|
|
|
|
|
|
для: Alex14
(22.12.2007 в 22:25)
| | Если русурс не будет создан, т.е. ошибка создания. | |
|
|
|
|
|
|
|
для: sim5
(22.12.2007 в 21:04)
| | Знаю, что @ подавляет вывод. Спросил в каких случаях imageCreateTrueColor не работает. | |
|
|
|
|
|
|
|
для: Alex14
(22.12.2007 в 15:33)
| | Да, если не указан цвет прозрачности то его индес равен 0. @ подавляет вывод, в данном случае убрать ее, либо удалить вывод об ошибке. | |
|
|
|
|
|
|
|
для: sim5
(22.12.2007 в 14:34)
| | Действительно, использование imageCreateTrueColor вместо imageCreate решает проблему. Но странно, что imageColorAt на это реагирует, ведь у меня задаётся цвет в пределах 24-х бит. Если бы открывалась готовая JPG-картинка с глубокими цветами, тогда это было бы понятно.
Картинка из памяти у меня уже была залита командой imageFilledRectangle (см. код выше). Прозрачность если не указана, то по-видимому принимается равной нулю и не выводится.
К чему @ перед imageCreateTrueColor и когда эта команда выдаёт false? | |
|
|
|
|
|
|
|
для: Alex14
(22.12.2007 в 13:30)
| | Если изображение может иметь альфа-канал, то да, допустим JPG не может содержать такого канала, а например формат TARGA (*.tga) может содержать такой канал как непосредственно в файле, так и в отдельном файле, но к веб этот формат отношения не имеет.
Что касается получения идекса цвета как вы хотите, то надо понимать, что $img у вас это ресурс (выделенная область памяти), а не реальное изображение. Поэтому вы можете получить индекс цвета некой координаты после того, как интересующая вас часть изображения будет, например залита, указанным вами цветом (область памяти ресурса будет изменена явно). Причем, как следует из мануала, нужно пользоваться функцией не imageсreate(), а imagecreatetruecolor():
<?
$im = @imagecreatetruecolor(100, 100) or die ("Error create image");
$color = imagecolorallocate ($im, R, G, B);
imagefill($im, 0, 0, $color);
echo imagecolorat($im, 10, 10);
?>
|
| |
|
|
|
|
|
|
|
для: 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;
|
(тоже из манула) | |
|
|
|
|
|
|
|
для: sim5
(22.12.2007 в 13:15)
| |
<?php
$w = 100; $h = 50;
$img = imageCreate($w, $h);
$bgcolor = imageColorAllocate($img, 255, 210, 230);
imageFilledRectangle($img, 0, 0, $w, $h, $bgcolor);
echo imagecolorat($img, 10, 10);
?>
|
выдаст ноль
Нет, меня интересует именно содержаение индекса, результат команды imagecolorallocate, чтобы можно было с этим индексом совершать манипуляции.
Кстати, в него помимо цветовых координат RGB ещё и чётвёртый параметр входит - прозрачность. | |
|
|
|
|
|
|
|
для: Alex14
(22.12.2007 в 13:10)
| |
<?
echo imagecolorat($img, $x, $y);
|
PS. Если вас интересует то что вы обычно видите в HTML представлении (hex-представление), то пропустите imagecolorat через функцию dechex(). Индекс цвета это представляние трех основных цветов RGB от 0 до 255 т.е. #000000 - #FFFFFF, по одному байту на цвет. | |
|
|
|
|