Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Графика > удалить фон изображения |
Автор: z-END 16.4.2013, 16:49 | ||
столкнулся с казалось бы простой, но уже второй день не решаемой проблемой... в общем есть изображения (jpg) на белом или почти белом фоне и есть банальная задача - сделать из них PNG с прозрачностью (т.е. просто удалив фон) а как оказалось задать "прозрачный цвет" можно только один, т.е. так:
результат во вложении... собственно вопрос, как задать диапазон "прозрачных цветов"? или какой-то другой способ более плавного решения задачи? да, под рукой только GD2, imagemagik на сервере отсутствует.. |
Автор: krundetz 17.4.2013, 17:50 |
z-END, а нельзя проделать несколько шагов? То есть поэтапно сделать прозрачными нужные цвета. |
Автор: Чучмек 17.4.2013, 22:09 | ||||
можно поиграть с палитрой
Добавлено через 6 минут и 35 секунд В imagecolorset смущает описание 6-го параметра
|
Автор: z-END 18.4.2013, 14:29 |
PNG24 насколько я понимаю truecolor, так что палитра для него не подойдет.. мыслей было две: А: 1. берем цвет угловой точки запоминаем его 2. попиксельно проходим все изображение и заменяем цвет из п.1. на цвет которого нет в изображении (-вопрос как его узнать) 3. находим imagecolorclosestalpha ближайшего к цвету из п.1. 4. выполняем пункты 3 и 2 Н-ное кол-во раз, и получаем диапазон цветов залитый "хромокеем", который потом используем в качестве прозрачного.. но, при стандартной фотке 2х3 тыщи пикселей, получаем 6 миллионов операций за 1 проход.. если делаем 20 проходов - 120 миллионов операций... мне кажется или это очень много?! )) |
Автор: z-END 19.4.2013, 17:34 | ||
Чучмек, действительно палитра работает.. только вот проблема все равно остается, хотя, конечно смотрится уже значительно лучше) чуть подправил:
с альфа каналом в imagecolorset работать отказался... ПХП чуть ниже версией... результаты в атаче |
Автор: Чучмек 19.4.2013, 21:36 | ||
Да не, так не годится. Я пробовал изменять цвета в палитре на transparentColor, но imagecolortransparent изменяет на прозрачный только один цвет. Еще попробую вызвать imagecolortransparent для каждого цвета, который должен стать прозрачным. Разница между черным и белым ((255-0)^2 + (255-0)^2 +(255-0)^2)^0,5 всего 442 Перебирать палитру хорошо, когда в ней мало цветов. Быстрей будет попиксельно перебрать
|