@sergey_privacy
Админ со стажем, начинающий DevOps

Как заменить автоматом белый фон вокруг картинок на прозрачный?

Добрый день всем!
Есть много тысяч картинок в куче каталогов с подкаталогами. Картинки - товары с белым фоном вокруг. Ищу (в идеале) программу или скрипт на php, которые во всех файлах во всех подкаталогах сможет заменить белый фон вокруг картинок, не затронув просто белый цвет в самих картинках. Это в идеале. В крайнем случае, можно весь белый цвет заменить на прозрачный. Или, в самом неудачном случае, произвести обрезку белого фона строго по квадрату с размерами картинки.

И совсем уже усложнение задачи: в некоторых файлах замечал, что отдельные области фона могут быть цвета не #ffffff, а #fdfffe. Т.е. на пару единиц отличаться от чистого белого.
  • Вопрос задан
  • 25527 просмотров
Пригласить эксперта
Ответы на вопрос 22
@topbanana
Возьмите 10-15 картинок из вашей базы, откройте в графическом редакторе, и залейте белый фон контрастным цветом. В нормальных редакторах у заливки есть настройки, чтобы она белым считала не только #ffffff, но и допускала некоторые отклонения, вроде #fdfffe.

Думаю результат вас не устроит, потому что по краям картинки все равно сохранится белая окантовка, либо заливка будет залезать на сам объект при большом допуске отклонений от белого. Особенно это заметно на тенях. Вот таким вот и будет результат автоматической замены белого на прозрачный.
Ответ написан
Комментировать
phtimofeeff
@phtimofeeff
МИРЭА Прикладная математика
Я взял вашу фотографию и на ее примере покажу вам что будет если делать все в автоматическом режиме...
Далее я приведу 4 результата с разной степенью допуска по белому, и так же для наглядности я вместо прозрачности подлжил красный фон, так будет понятнее и нагляднее:
автоматический выбор белого с допуском в 1:
001-1.jpg
автоматический выбор белого с допуском в 2:
001-2.jpg
автоматический выбор белого с допуском в 4:
001-3.jpg
автоматический выбор белого с допуском в 8:
001-4.jpg
Вот такие будут результаты. Причем на каждом фото они будут разные.
Все очень сильно зависит от разбега белого цвета.
Ответ написан
Комментировать
iiil
@iiil
Инженер и вэб-дизайнер, рисую.
Вас не устроит результат. Советую, раз изображений столько, исправить шаблон страницы, чтобы в нем картинка на белом фоне смотрелась нормально. Это вполне реально.
Ответ написан
Комментировать
Kerman
@Kerman
Наивный чукотский юноша. Люди из adobe (и не только) бьются над задачей смена фона уже десятилетиями. Придумана технология chromakey для съёмок, но и она не идеальна.
А он собирается найти готовую библиотеку, а если не получится написать за два вечера.

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

Короче. Смена фона возможна, если предмет матовый, имеет чёткий тёмный контур, весь в фокусе и нет бликов по краю. В таком случае можно использовать Photoshop batch - Layer -> Matting -> Remove white matting.
Ответ написан
miraage
@miraage
Старый прогер
Если они одинаково расположены, то макросы фотошопа могут подойти.
Не силен в графике/дизайне.
Ответ написан
Комментировать
SazereS
@SazereS
Самое простое, что пришло в голову - самописный скрипт на любом языке. Рекурсивно перебирать файлы в папке, заменять белый на прозрачный и сохранять в другой каталог (дабы не попортить исходники)
Ответ написан
@tosteruser
Под Windows есть программа FastStone Photo Resizer. Много чего умеет делать массово с изображениями. Возможно, поможет.
Ответ написан
Комментировать
@MadMapGuy
Я так понимаю, что картинки у вас имеют форму квадрата, а вы хотели бы сделать вокруг фон прозрачный.

Делать программно я не уверен что это в принципе возможно без каких либо артефактов в изображении. (если только картинки не векторные, но опять же, есть уверенность что у вас растр).

Так вот, единственный выход, это инструмент волшебная палочка, в любом более менее нормальном графическом редакторе, и простое вырезание фона + лёгкая доводка краёв кисточкой с прозрачностью.
Ответ написан
Белый фон везде одинаковый как рамка?
Тогда:
1. зачем было ее делать, если можно было сделать рамку с помощью стилей?
2. обязательно заменять белый прозрачным? Или опять же можно просто обрезать, а стилями потом делать хоть прозрачную рамку, хоть цветную и любого размера

Если этот фон в виде рамки и везде одинаковый, то можно с помощью php брать исходное изображение, копировать его в новое, но не полностью, а взяв например начиная с 5px (сверху и слева) и заканчивая на 5px (справа и снизу) раньше чем заканчивается изображение (если рамка в 5px) и сохранять с заменой туда же.

p.s. если такой вариант подходит, то ему все равно какого цвета фон, главное что бы размер подходил.
Ответ написан
phtimofeeff
@phtimofeeff
МИРЭА Прикладная математика
в jpeg это точно не возможно, вернее можно конечно, но результат будет очень даже не интересный, во-первых белый на глаз, далеко не всегда белый на самом деле, во вторых и сами предметы могут содержать белый цвет и зоны пересвета, которые так же фактически являются белым...
так что однозначного решения в этом вопросе нет.
а я зато всегда предлагаю своим клиентам снимать на чёрном фоне, он в эом плане лучше.

вот обрезать строго по квадрату еще можно, и то нет гарантии что и предмет не обрежет, это все лучше делать ручками. увы, но ручной труд в фотографии это основа основ...
Ответ написан
Комментировать
@sergey_privacy Автор вопроса
Админ со стажем, начинающий DevOps
>в jpeg это точно не возможно, вернее можно конечно, но результат будет очень даже не интересный,
Что значит возможно? В jpg прозрачность? Первый раз слышу. gif, png - понятно, а в jpg отродясь не было.

>во-первых белый на глаз, далеко не всегда белый на самом деле, во вторых и сами предметы могут содержать белый цвет и зоны пересвета, которые так же фактически являются белым...
я занимался попиксельной обработкой фото. Построчно, попиксельно считываешь, получаешь код цвета, сравниваешь. Можно задать разбег диапазона каждого канала в 5-15 единиц и все эти цвета заменять прозрачным. Программа то будет небольшая, на пару страниц. Только больше этим геморроем я заниматься не хочу.

>так что однозначного решения в этом вопросе нет.
а я зато всегда предлагаю своим клиентам снимать на чёрном фоне, он в эом плане лучше.
Ответ есть, ничего волшебного в алгоритме. А отталкиваться приходится от уже сложившейся ситуации.

>вот обрезать строго по квадрату еще можно, и то нет гарантии что и предмет не обрежет, это все лучше делать ручками. увы, но ручной труд в фотографии это основа основ...
Что это за программа, которая обрезает вместе с изображением? Бред какой то. Выдернуть левые, правые, верхние и нижние границы изображения - задача на уровне первого курса института. Обычное нахождение экстремумов двумерного массива.
Ответ написан
Комментировать
@sergey_privacy Автор вопроса
Админ со стажем, начинающий DevOps
я бы попробовал в фотошопе через автоматизацию - делается одна, при этом записывается макрос, потом обработка всей папки. это достаточно просто и быстро.

Я настолько глубоко в фотошоп не залазил, поэтому поинтересуюсь. Он может обрабатывать только в этой папке или с деревом вложенных папок? У меня несколько тысяч файлов и сложная структура вложенных папок числом порядка сотни. Сможет рекурсивно обработать все?


естественно не все действия он сможет повторить.

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


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

На вложенные папки получится?


1. обязательно сделать копию - многое запорете

Значит не мой вариант. Для того и задаю вопрос, чтобы запоротые фото оказались в количестве менее 1%


2. "прозрачный", как верно выше ответили есть в png, gif, но не в jpg
3. что у вас вообще за изображения то??? очень сложно работать телепатом - парочку бы примеров наиболее характерных показали. или аналогичные хотя бы.
какой формат и тп, опять же насколько много изображений...

Раз говорю про прозрачность, значит фото в одном из указанных форматов. gif для хранения реальных данных, я считаю, остался в 90-х годах. Для спрайтов, логотипов или элементов дизайна еще будет какое то время использоваться. Остался png. Как говорил выше, контрастные фото товаров на белом фоне типа такого 294a7a420178f225e50c7b2ca41fa671.JPG
Наличие фото как то отменяет смысл фразы "контрастные фото на чистом белом фоне"?


в общем много вопросов, без ответа на которые мы не можем посоветовать что-то более конкретное.

Много вопросов и комментариев не по существу и фраза "мы не телепаты" уже подсказывает мне, что решение предложено не будет.


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

Мне понадобится примерно 3-4 полных дня работы для написания программы. А студентам еще платить надо и сделают работу однозначно хуже.
Ответ написан
Комментировать
@sergey_privacy Автор вопроса
Админ со стажем, начинающий DevOps
то фото, что у вас в примере - должно обработаться нормально
но где гарантия что нормально обработаются все?

Фото однотипные, нормальный инструмент должен справиться со всеми одинаково.


глубоко???? это не глубоко. к сожалению я дома, а тут кроме паинтнета и гимпа ничего нет. в фотошопе "автоматизация" очень простой и удобный инструмент. аналог есть в гимпе, но он сложнее "на разобраться".

Я в фотошопе умею пользоваться слоями, основными инструментами на уровне начинающего пользователя. Разобраться с автоматизацией не проблема, просто в эту сторону ранее не смотрел.


ВСЕГДА делайте бэкапы. что-нибудь глюканет при обработке - все будете заново создавать?

Я работаю админом, бэкапы - первая заповедь. Все нужное хранится в десятке мест.


вот если найти как волшебной палочкой ткнуть в фотошопе в угол изображения автоматически...

И каждую фотку открывать вручную, применять макрос, потом сохранять? На это уйдут месяцы. Нужен рекурсивный обход каталогов.


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

Вы чего перевозбудились? Разве я просил написать за меня программу? Я спросил, вдруг кто то знает готовый продукт, который обладает подобными функциями? Или сказать название известной вам программы - это слишком тяжелый труд?
Некоторое время назад возникла потребность в массовом переименовании файлов и преобразовании форматов. Спросил совета, тут же накидали несколько названий существующих продуктов. Сейчас ситуация такая же и я не понимаю, что за проблему вы развиваете. Не знаете названия - ну и фиг с ним. Никого я не подпрягал программу писать.
Ответ написан
Комментировать
@sergey_privacy Автор вопроса
Админ со стажем, начинающий DevOps
Я потому и сказал, что нужно заменять не весь белый цвет, а только вокруг изображения. Задача один в один, как распознавание капчи. Т.е. вычисляем края изображения, отличные от фона, фон отбрасываем. Все, что внутри контуров, не трогаем. Алгоритмов полно, я думаю и софт готовый есть. Осталось название найти.
Ответ написан
phtimofeeff
@phtimofeeff
МИРЭА Прикладная математика
Чтобы вам стало понятнее я отрезал лишний диапазон и расширил диапазон белого на весь спектр...
В итоге выползло ярко и доходчиво:
001-5.jpg
Вот такой у вас собственно белый на картинке... ;)
И всё это исключительно из-за особенности JPEG стандарта...
Ответ написан
Комментировать
@sergey_privacy Автор вопроса
Админ со стажем, начинающий DevOps
Задача не срочная, пока только планирую переделку сайта. Пока надежда не умерла, буду пытаться найти готовое решение. Очень уж не люблю попиксельно графику обрабатывать.
Пару десятков тысяч фото в сотнях каталогов займут гораздо больше времени. Даже по одной минуте на файл уже займут 2 полных недели времени. Весь сайт столько не стоит, сколько отдам за обработку фоток.
Ответ написан
Комментировать
@sergey_privacy Автор вопроса
Админ со стажем, начинающий DevOps
Что именно я должен был пробовать делать? Вручную фотошопить десятки тысяч фото? Спасибо, увольте! Хватило опыта с парой сотен фото.
Программу самому написать? Уже был подобный опыт, распознавание образов писал как то. Исходников не сохранилось, писать придется заново. Я знаю, что могу написать такую же программу, но помню и весь геморрой при разработке и отладке алгоритма. Поэтому решил пока подождать.
Ответ написан
Комментировать
@sergey_privacy Автор вопроса
Админ со стажем, начинающий DevOps
Для начала, перестаньте хамить.
Программу написать за 20-30 минут не получится, на это уйдет несколько дней.
Рабочего варианта в нужном мне виде я пока не увидел, пробовать нечего.
За 30 баксов студент не возьмется обрабатывать 20-30 тысяч фото, особенно в куче подкаталогов.
По поводу неумехи - оставьте ваше неквалифицированное мнение при себе. Не зная ситуации ставить диагноз - моветон. Есть сайт, сайт работает, хочется без лишних затрат времени и денег сделать лучше. Пока занимаюсь кучей других проектов и жду, когда среди троллей типа вас появится кто-нибудь, кто вместо кучи костылей подскажет название нормальной программы. Тот набор костылей, которые предлагаете вы, мне не подходит.
Ответ написан
Комментировать
@sergey_privacy Автор вопроса
Админ со стажем, начинающий DevOps
для начала вы себя показываете как неумеха, который категорически отказывается что-то пробовать
даже из разжеванного

Я работал с фотошопом и знаю, какая фигня получится. Волшебная палочка требует тщательного подбора параметров допуска. Чуть ошибешься - выделение залезет на само изображение. Результат будет плохой, несколько процентов изображений будет покоцано. Причем мне вручную придется просматривать все фотки, проходить все дерево каталогов. Зачем тратить время на заведомо негодный результат?


за 30 баксов студент с радостью возьмется написать ту "программу" что я накидал выше
потому что цена ей - менее часа рабочего времени. а это 10 баксов для студента.
еще 20 - за машинное время - думаю за ночь комп с хорошим процом все сделает.

А потом я опять сам просматриваю все фотки, нахожу огромное количество багов и возвращаюсь к первоначальным условиям.


вы - не хотите/не можете. это не просто диагноз. это приговор. вам нельзя работать на сложных работах - вы не умеете. идите копайте траншеи. хотя там то же надо думать... ;-(

Как я и говорил, вы - хамло.
Ответ написан
Комментировать
@sergey_privacy Автор вопроса
Админ со стажем, начинающий DevOps
СЕОшники такие СЕОшники. ничего не знают, ничего не умеют, хотят что бы кто-то за них все сделал, а они только бабки гребли...

Кто сказал, что я СЕО-шник?
Я админ сети на 5000+ пользователей со стажем больше 15 лет, программист с опытом программирования больше, чем на 10 языках программирования. Сертификатов у меня на пол стены. Сайтостроительство - это скорее хобби, друзьям-знакомым временами помогаю. Опыта и знаний в сфере ИТ достаточно, чтобы понять, что ваш вариант - набор костылей с заведомо плохим результатом на выходе, который потребует сотни человеко-часов работы по проверке и исправлению недоделок. Если вашей квалификации и знаний не хватает на рассмотрение других вариантов - ваша проблема. Решение отстойное, я его не рассматриваю. И перестаньте считать деньги в чужих карманах. Нытье просто унизительно.
Ответ написан
Комментировать
@sergey_privacy Автор вопроса
Админ со стажем, начинающий DevOps
2Arlakz: хватит троллить, просто отвали. Не твое дело, куда я трачу деньги, чем их зарабатываю, кому плачу, сколько плачу и я не собираюсь спрашивать у тебя разрешения или советоваться, что мне дальше делать. Ты ничего обо мне не знаешь и кроме хамства от тебя толку нет. Твоя фраза "сложная задача" или "слишком сложная задача" показывает, что ты вообще не в теме. Зачем мне спорить с дилетантом? Я писал ПО для распознавания фото и видео в реальном времени и я тебе говорю, что это задача в текущем виде для студента института. Выделить контуры контрастного изображения с четкими краями - это фигня. Ссылка на программу, которую ты привел - это действительно очень сложная и кропотливая работа. А самому платить приличные деньги студентам за шабашку с непредсказуемым результатом я не собираюсь. Только недавно получил комплект примерно из 2-3 тысяч картинок, обработанных таким студентом. Несколько десятков фото пришлось переделывать самому, оно мне надо? Особенно, если за сайт получил от друзей пару бутылок коньяка, а платить за улучшательство должен из своего кармана сумму, превышающую стоимость этого коньяка.
Ответ написан
Комментировать
@sergey_privacy Автор вопроса
Админ со стажем, начинающий DevOps
>>собенно, если за сайт получил от друзей пару бутылок коньяка, а платить за улучшательство должен из своего кармана сумму, превышающую стоимость этого коньяка.
>Вот и видно цену вашей "работы". ваш час стоит меньше чем плинтус.
Если вам еврейские корни мешают делать что то для друзей бесплатно, то проблема только в ваших еврейских корнях. Или в отсутствии друзей. Я друзьям помогал и ремонт делать в квартире, и частный дом строить, и компьютеры настраивал, и сетку компьютерную тянул, и сайты приходилось делать. Друзья мне в ответ много чего делали бесплатно. В качестве символической расплаты - пиво, коньяк, шашлык. Работа, которую я делаю за деньги, вас совершенно не касается и к сайтосртроительству не имеет ни малейшего отношения. Поэтому про увольнения и соответствие должности вы, по своему обыкновению, попали пальцем сами знаете куда. Много трепа и оскорблений не по существу вопроса.

>ты какое ТЗ написал - такой ответ и получил
Для начала, это было не ТЗ, а вопрос. Просто ищу название программы с такой функцией. Набор костылей, сделающий работу плохо и требующий сотен часов моего времени, мне не нужен. Твое решение именно такое. А раз ты так за него цепляешься, значит на рассмотрение других вариантов квалификации не хватает. О чем тогда спорить? Тем более, картинка для примера была предоставлена, описание задачи было вполне объемное. Никаких дополнительных данных, требующих телепатию, никто не уточнял и их в принципе не требуется.

>судя по "пришлось переделывать" ТЗ вы составлять так и не научились. Да и договор наверное с ними не составляли...
Какой договор, какое ТЗ? У друзей встала задача, которую попросили помочь решить с исходными данными. Я им помог, в дизайне сайта все выглядит отлично, их вполне устраивает. Я сам могу и хочу дизайн сделать лучше, но текущий вид картинок меня не устраивает. Будет хорошее решение, не состоящее из костылей, не требующее сотен часов работы или вложения моих денег - тогда и займусь.
Поэтому прекращай троллить. Не знаешь нормального решения - занимайся собственным образованием вместо того, чтобы хамить людям. Все, бисер кончился, рука метать устала.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы