Это сообщение является продолжением вопроса, заданного пару лет назад здесь: Обрезать пробелы на изображении в PHP
Этот пост прекрасно объясняет, как использовать php для обрезкичистый пробел вокруг изображения.Проблема здесь в том, что он ожидает "чистый белый" вокруг изображения.Вот что я пытаюсь сделать и чем он отличается:
Я использую свой мобильный телефон в качестве «сканера», чтобы снимать документы и затем загружать их на свой сервер (не волнуйтесь ...здесь не происходит ничего «секретного агента» ... на самом деле это в основном квитанции от обедов, а иногда и визиток).В моем случае я всегда стараюсь использовать темный фон для контрастирования со светлой цветной бумагой.Изображения никогда не получаются с "чистыми" черными / белыми цветами как бы то ни было.Мое изображение всегда в формате JPG.Я экспериментирую с кодом, упомянутым выше (но поменялся местами для проверки на темную / черную границу), и мне интересно, есть ли способ обобщить функцию для более широкого применения?Я могу установить ImageMagick и использовать trimImage и некоторые другие вещи, но я предпочел бы придерживаться GD, поскольку это будет более полезным для большего количества пользователей StackOverflow.Вот что я думал до сих пор:
IDEA # 1: преобразовать изображение в оттенки серого и получить очень высокий контраст ... сделайте сравнение там (предположительно с чистым черным в этой точке) ... затемиспользуйте найденные координаты на исходном (не в оттенках серого) изображении.Как вы думаете ... хороший подход?Будет ли это работать?Я бы использовал imagefilter ($ img, IMG_FILTER_GRAYSCALE);и затем imagefilter ($ img, IMG_FILTER_CONTRAST, -90);
ИДЕЯ # 2: Перейти универсальный.Это идея, в которой я нуждаюсь больше всего.Было бы очень здорово, если бы я мог автоматически определять приблизительный диапазон цветов от границы.Идея заключалась бы в том, чтобы выбрать пиксель (или несколько) из каждого из четырех углов, а затем «усреднить» их, чтобы выяснить фон.Это означало бы, что однажды, если я захочу сделать фотографию на коричневом фоне, красном фоне или зеленом фоне ... нет проблем.Я думаю, что первый шаг в этом направлении будет включать использование imagecolorclosest (), но, честно говоря, я в курсе того, как выбирать, сравнивать, усреднять, а затем повторно сравнивать цвета.В идеале был бы способ просто подключить часть этой логики к исходной функции (по ссылке выше), и тогда он мог бы работать в общем случае независимо от того, какой цвет фона в изображении (при условии, что он достаточно последовательный) и будетработать с фотографией (то есть с изображением, где цвет фона не совсем одинаковый по цвету).
Итак ... вопрос, состоящий из двух частей: мой IDEA # 1 лучший подход и есть ликакие-либо проблемы, которые я должен знать или предложения по улучшению / реализации?И ... кто-нибудь хочет попробовать IDEA # 2 и хотя бы дать мне достаточно кода, чтобы двигаться в правильном направлении?