|
 5 Кб |
|
| Надо из того что на рисунке слева получить то что справа. Делаю так:
imagecolortransparent ($im ,0xDD00AA);
|
Далее, если сохранить в GIF, то розовый цвет так и остается.
Если сохранить в PNG, то в Опере вроде цвет становится прозрачным, в проводнике то же все хорошо, а если смотреть через IE или открыть в Photoshope то опять виден розовый цвет.
Что делать? | |
|
|
|
|
|
|
|
для: СерегаВЕБ
(28.01.2006 в 15:16)
| | Вы не совсем правильно работаете с цветом. Цвет сначала нужно определить с помощью функции imagecolorallocate().
$color = imagecolorallocate ($im, $red, $green, $blue);
imagecolortransparent($im $color);
|
$red, $green, $blue – это переменные, в которых содержатся числовые значения RGB. Например: 24, 255, 68 | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(29.01.2006 в 06:36)
| | Эту штуку я уже пробовал -- не помогает.
Можь есть каконьть пример с этой функцией? | |
|
|
|
|
|
|
|
для: СерегаВЕБ
(30.01.2006 в 12:11)
| | Вот, когда то Дизайнер тоже показал мне как добиться прозрачности и оно до сих пор в силе. (особое внимание gd библиотеке, некоторые версии сбойные по умолчанию и на локалке нужно пробывать разные варианты)
// Обработка изображения для поддержки прозрачности
//определяем какой цвет сделать прозрачным ($dest_img - хэндл изображения с которым работаем)
$backgr = imagecolorallocate($dest_img, 0, 0, 0);
imagetruecolortopalette($dest_img, true, 1);
imagecolortransparent($dest_img, $backgr); | |
|
|
|
|
|
|
|
для: XPraptor
(30.01.2006 в 12:39)
| | Спасибо, сработало. Значит все дело было в палитре.
Но все таки палитру надо ставить после определения прозрачного цвета, а то он может поменятся на близкий к нему, встретившийся на изображении:
imagecolortransparent($im, 0xdd00aa);
imagetruecolortopalette($im, true, 256);
|
| |
|
|
|
|
|
|
|
для: СерегаВЕБ
(30.01.2006 в 21:19)
| | Смысл был в том, чтобы ужать палитру до приемлемого минимума и уже только после этого установить прозрачный цвет. Например, у Вас полноцветное изображение – миллионы оттенков. Вы хотите сделать какой-то цвет прозрачным, сделать прозрачной область. Но на самом деле все пиксели нужного вам цвета в этой области не равны друг другу по значениям RBG, а отличаются друг от друга на несколько значений. Для глаза эти отличия незаметны. И если вы не ужмете палитру, то назначив какой-либо цвет прозрачным, Вы сделаете прозрачными лишь несколько пикселей.
Чтобы уменьшить разброс цветовой гаммы и привести значения близких цветов к одному единственному и применяется функция imagetruecolortopalette(). | |
|
|
|
|
 12.3 Кб |
|
|
для: glsv (Дизайнер)
(31.01.2006 в 00:33)
| | Так а мне как раз и надо сделать прозрачный только 1 из миллионов прозрачным, которым я специально закрасил область на шаблоне (шаблон содержит прозрачные цвета, через которые будет видно картинку под ним, и розовый цвет, который закроет края картики). Если при сокращении цветов этот цвет совпадет с каким-то с самой картинки, то в нейбудут дырки.
Результат в 34.zip, который получился так Kitten.jpg + shablon.png - розовый цвет = 8.gif | |
|
|
|
|
|
|
|
для: СерегаВЕБ
(31.01.2006 в 19:18)
| | > Так а мне как раз и надо сделать прозрачный только 1 из миллионов прозрачным
Я немного про другое. Вы закрасили область на шаблоне однородным цветом, но не факт, что эта область после сохранения результата в файл осталась такой же однородной. Если сохраняете в JPEG, то скорее всего нет, т.к. JPEG сохраняет с потерей качества. Там миллионы оттенков. И ваша, казалось бы, однородная область на самом деле состоит из тысяч оттенков. А Вы назначаете прозрачным только один оттенок, а другие тысячи не трогаете. Поэтому и результата не видно.
> Если при сокращении цветов этот цвет совпадет с каким-то с самой картинки, то в нейбудут дырки.
Это возможно если очень сильно сжимать палитру. Нужно экспериментировать и искать компромисс.
Хотя, скорее всего, именно в Вашем случае главную роль играет другой момент.
Imagecolortransparent() может создавать только полностью прозрачнее пиксели, а значит результат ее работы предназначена вывода в форматы GIF и PNG-8. Оба этих формата поддерживает только 256 цветов.
Отсюда можно сделать вывод: для того, чтобы применять функцию Imagecolortransparent() к изображению нужно его предварительно переформатировать из полноцветного в изображение с палитрой, которая содержит не более 256 цветов. | |
|
|
|