GD: Подбор цвета шрифта в зависимости от цвета пиксела на фото

Avdoshyn

Новичок
GD: Подбор цвета шрифта в зависимости от цвета пиксела на фото

Собственно задача в сабже.

Есть фотогалерея, при аплоаде фото необходимо добавлять на фото автора, соответственно цвет шрифта должен контрастировать с фоном фото.
В общем-то вопрос сводиться к тому как корректно перевести RGB черной белый Duotone.

Пока что все до чего дошел
$dest = ImageCreateFromJPEG($file);
$black = imagecolorallocate($dest, 0, 0, 0);
$white = imagecolorallocate($dest, 255, 255, 255);
$rgb1 = imagecolorat($dest,$x,$y-5);
$ar1 = imagecolorsforindex($dest,$rgb1);
$sum1 = $ar1["red"]+$ar1["green"]+$ar1["blue"];
$criteria = round(765/2);
if($criteria<$sum1) $color = $black;
else $color = $white;
imagettftext($dest, 8, 0, $x, $y, $color, "verdanab.ttf", $text);


Кстати если кого интересует вариант просто инвертации цвета, то он достигается так

$rgb = imagecolorat($dest,$x,$y);
$ar = imagecolorsforindex($dest,$rgb);
$r = 255-$ar["red"];
$g = 255-$ar["green"];
$b = 255-$ar["blue"];
$color = imagecolorallocate($dest, $r, $g, $b);

но это не подходит - потому что будет не сайт - а елочная игрушка, интересует только RGB->черно-белый
 

neko

tеam neko
я чето непойму ты яркость пытаешься определить по одному единственному пикселю чтоли?

плохая идея.

тогда уж смотри яркость всей области, куда вставляется текст.
но это тоже плохая идея.

хороший вариант -- предложить пользователю самому выбрать цвет для подписи.
 

Demiurg

Guest
а почему не сделать черный текст с белой окантовкой, например?
 

neko

tеam neko
окантовку упаришься делать :)
можно конечно плашку белую подложить под текст, но это некрасиво.

самое простое и логичное -- давать юзеру самому выбирать цвет.
фотку то он сам заливает.
 

valyala

Новичок
Для преобразования из RGB в grayscale обычно используется следующая формула:
Код:
grayscale = 0.3*R + 0.59*G + 0.11*B
Из grayscale в B/W преобразуешь сам :)
 

neko

tеam neko
один вопрос остался неясен
нафига все ринулись преобразовывать что-то-там в grayscale
 

Perlik

Guest
А можно же на картинке размещать сначала черный текст, а поверх, чуть левее и повыше - белый!
Тогда получиться эффект тени, и всё будет зашибенно!
 

Avdoshyn

Новичок
Ответы:

2 neko: это фотобанк с большим кол-вом постоянно добавляющихся фото - смысл как раз в автоматизации, так что выбирать самому - не годится.
а определяю я не по одной а по 3 точкам со сдвигом по x, и потом считаю каких больше светлых или темных

2 Nirva: пробовал, толком не нашел, поэтому и пишу, а вообще точно в 10 - мне как раз это и надо

2 Demiurg: как самый последний из выходов можно применить - но все же интересно было бы найти "красивое" решение задачи

2 valyala: спасибо, попробую

2 Perlik: :))
 

neko

tеam neko
определяю я не по одной а по 3 точкам со сдвигом по x, и потом считаю каких больше светлых или темных
это процедура бессмысленная, можно много примеров привести где этот вариант несработает.
например какие-нибудь деревья там на фоне неба (темное, светлое, темное итд)

если уж ты считаешь яркость участка под текстом, считай под всю площадь. можно например участок заресамплить до меньших размеров а потом высчитать.
хотя это все равно кривенькое решение.

нормально будет или таки сделать плашку
или дать пользователю выбрать
еще можно сделать какой-нибудь полпрозрачный текст а ля корбис.

это фотобанк с большим кол-вом постоянно добавляющихся фото
да хоть фотосклянк
фотки руками заливают?
небось описания к ним пишут тоже руками?
ну а цвет то выбрать несудьба?
 
Сверху