Конвертирование изображения в черно-белое на PHP


Блог старого компьютера

Черно-белое изображение средствами PHP

Для использование некоторых других фильтров, необходимо указывать дополнительные параметры. И так вернемся к теме статьи. И так функция:

function gray_photo($src, $dest) <
if (!file_exists($src)) return false;
$size_img = getimagesize($src);
$format = strtolower(substr($size_img[‘mime’], strpos($size_img[‘mime’], ‘/’)+1));
$icfunc = «imagecreatefrom» . $format;
if (!function_exists($icfunc)) return false;
$image = $icfunc($src);
imagefilter($image, IMG_FILTER_GRAYSCALE);
imagejpeg($image, $dest, 95);
>

Функции передается два значения это $src — путь до исходного изображения, $dest — путь до нового изображения. Так же доработав функцию можно передавать ей тип фильтра, и аргументы если нужны (тогда конечно и название функции нужно будет поменять так как она сможет иметь различные возможности).

Пример работы функции можно увидеть в шапке статьи. Готов ответить на все вопросы в комментариях если конечно они возникунт.

Как преобразовать изображение в черно-белое в PHP

10 Annan [2008-10-31 21:01:00]

Как сделать преобразование изображения в черно-белое в PHP?

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

php image imagefilter

8 ответов

10 Решение Jasper Bekkers [2008-10-31 21:18:00]

Просто округлите цвет в оттенках серого до черного или белого.

Использование библиотеки php gd:

Подробнее см. комментарии пользователей в приведенной выше ссылке.

6 jonnii [2008-10-31 21:03:00]

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

1 Amed [2013-01-12 05:43:00]

Эта функция работает как шарм

1 KEL [2012-04-25 13:40:00]

1 toolkit [2008-10-31 21:10:00]

Если вы намереваетесь сделать это самостоятельно, вам нужно будет реализовать алгоритм @jonni говорит, что использование существующего инструмента было бы намного проще?

Для каждого пикселя вы должны преобразовать из цвета в оттенки серого — что-то вроде $ gray = $red * 0.299 + $green * 0.587 + $blue * 0.114; (это весовые коэффициенты NTSC, другие подобные весовые коэффициенты существуют, что имитирует чувствительность глаза к различным цветам).

Затем вам нужно определить значение отсечки — как правило, половину максимального значения пикселя, но в зависимости от изображения вы можете предпочесть более высокое значение (сделать изображение темнее) или ниже (сделать изображение ярче).

Простое сравнение каждого пикселя с отсечкой теряет много деталей, т.е. большие темные области идут полностью черными, поэтому чтобы сохранить дополнительную информацию, вы можете сгладить. В основном, начните в левом верхнем углу изображения: для каждого пикселя добавьте ошибку (разницу между исходным значением и конечным назначенным значением) для пикселей слева и выше, прежде чем сравнивать с значением отсечки.

Имейте в виду, что выполнение этого в PHP будет очень медленным — вы бы гораздо дальше искали библиотеку, которая предоставляет это.

PHP: Как отличить черно-белое изображение от цветного?


Даны два изображения. С точки зрения человека одно цветное, а другое черно-белое. Нужно отличить их по признаку цветности с помощью PHP/GD2.

Единственная найденная мною функция определения цветности называется imageistruecolor, но проблема в том, что оба изображения имеют полноцветную палитру и результат выполнения функции одинаков — сравнение не удается.

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

Может я что-то упустил и есть «зеленые» решения?

  • Вопрос задан более трёх лет назад
  • 4168 просмотров

Отресайзить в один пиксель, посмотреть его цвет.
Если я правильно это себе представляю — этот пиксель будет иметь усредненный цвет всей картинки.

Файлы в разных форматах или каком-то определенном?

Хабр, я тебе удивляюсь. Заминусовали камент (ладно), минусанули в карму. За что? За то что потратил свое время и предложил решение? Это меня не задевает, но очень сильно удивляет.

Потратил еще пол часа, расписал подробнее:
al.od.ua/is_grayscale.php

Тут изложены три метода измерения, ресайз (как описано у меня), тестирование случайных 10 пикселей (как предложено выше и тестирование всех пикселей, как хотел автор.
Тест проведен на картинках 3648×2736 и 200х150. Подробные результаты по ссылке, в кратце:
проверка случайных пикселей быстрее в 2-5 раз (зависит от размера), ресайз быстрее проверки всех пикселей примерно в сто раз на ЧБ картинках, т.к. в случае с цветным изображением измерения прекращаются после первого же измерения.

Илон Маск рекомендует:  Что такое код iis возможности

То есть, если автору не подходит измерение случайных пикселей ресайз очень даже выход. Так за что такие минусы?

Создание черно-белого изображения из цветного

Дата публикации: 2012-08-06

От автора: часто перед веб-мастером встает задача работы с изображениями, в частности, их обработка. Например, одной из таких задач является создание черно-белого (ЧБ) изображения из имеющегося цветного. Нашей сегодняшней задачей будет вывод на страницу ЧБ изображения, при наведении на которое оно будет становиться цветным.

В принципе, нет ничего проще, чем подготовить картинку заранее и воспользоваться техникой спрайтов для смены картинок одной на другую. Но это решение далеко не всегда нам подойдет. Например, мы позволяем пользователям нашего сайта загружать картинки, к которым и должен быть применен нужный нам эффект. Очевидно, что здесь мы уже должны обработать загруженные изображения на стороне сервера (PHP) или клиента (JS), чтобы на сайт выводилось ЧБ изображение.

Что же, давайте приступим к реализации задачи…

План урока

1. Реализация задачи на PHP

2. Реализация задачи при помощи jQuery

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

Детали учебника

Тема: PHP, jQuery

Сложность: Средняя

Урок: Видео (.mp4)


Время: 01:03:32

Размер архива: 78 Mb

1. Реализация задачи на PHP

Первый способ, который мы рассмотрим, позволяет обрабатывать картинки на стороне сервера. Делать это мы будем средствами PHP. Сразу стоит оговориться, что для успешной работы данного способа версия PHP на Вашем сервере должна стоять версия PHP не ниже 5-ой и должна быть библиотека GD (библиотека для работы с изображениями). Как все это проверить, мы рассмотрим ниже.

Итак, для начала создадим на сервере 2 папки, назовем их, к примеру, «blackwhite» и «color». Первая папка будет хранить ЧБ изображения, вторая — цветные. Мы здесь не будем рассматривать загрузку изображений пользователями на сервер и вывод этих изображений на сайт. Все это Вы можете найти в наших предыдущих уроках, в частности это урок Загрузка изображений с изменением размера.

Конвертируем в ЧБ правильно

Недавно меня спросили о процессе преобразования изображения в черно-белое, а именно, как можно узнать, что изображение подходит для этого. Так что в этой статье я собираюсь рассказать о том, как правильно конвертировать изображение в черно-белое и как это сделать в Photoshop без потери качества.

Когда лучше переводить изображение в черно-белый

Есть три идеи, которые приходят мне на ум, когда я пытаюсь оценить, должен ли я перевести свое изображение в черно-белое (здесь и далее буду называть сокращенно ЧБ):

  1. В первую очередь, это немного очевидно, но какой вы желаете получить результат? Ваш клиент специально просил сделать фото ЧБ? Вы участвуете в фотоконкурсе в номинации для ЧБ? Вы делаете серию для галереи ЧБ (потому что, вообще-то, это выглядит не слишком хорошо, когда у вас только одно или два фото ЧБ среди цветных, вы ведь хотите иметь удачное сочетание?) Как я уже сказал, это довольно очевидно, что вам необходимо учитывать конечный результат, но это стоило высказать еще раз.
  2. Во-вторых, необходимо учитывать значение динамического диапазона. В фотографии термин «значение диапазона» говорит о соотношении темных и светлых участков изображения. Поэтому, когда я говорю оценивать диапазон изображения, я говорю о том, есть у вас зоны глубокого черного и яркого белого на фотографии. Какой у вас динамический диапазон? В большинстве своем, «плоские» изображения выглядят не очень хорошо в ЧБ. Традиционные ЧБ имеют хорошую контрастность и достаточно растянутые значения по всей гистограмме. Так что, если ваше изображение имеет эти составляющие, то оно может стать неплохим выбором для конвертации в ЧБ.
  3. Я напишу когда-нибудь статью на тему теории цвета и цветовых отношений, но если у вас есть странные сочетания цветов, которые не выглядят удовлетворительно вместе, то такой снимок может быть хорошим кандидатом для преобразование в ЧБ. Посмотрим правде в глаза, некоторые цвета не очень хорошо сочетаются с другими. ЧБ может быть прекрасным способом избежать несогласованности и получить отличную фотографию.

Просто совет: если вы прищурите глаза, глядя на изображение, вы увидите меньше цветов и более расширенный диапазон. Это может помочь получить представление, действительно ли ваше изображение имеет подходящий динамический диапазон.

Как преобразовать цветное изображение в черно-белое

Ладно, давайте теперь поговорим о том, как перевести изображение в ЧБ, потому что есть два пути: правильный и неправильный. Вы, конечно, можете получить такой же результат, но если вы делаете это неправильно, вы в действительности будете терять качество (технически, вы приносите в жертву байты информации). В этой статье я буду говорить об использовании Adobe Photoshop. Есть и другие программы для конвертации, которые вы можете купить, но с точки зрения целесообразности, зачем платить дополнительно, когда вы очень легко можете сделать это в Photoshop.

Илон Маск рекомендует:  Разработка высококачественного сайта для мобильного устройства

Шаг 1

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

Шаг 2

Далее, большинство людей пытаются пойти в главное меню, выбрать Изображение > Режим (Image > Mode) и изменить цветовой профиль на «Градации серого» (Grayscale).

Не делайте этого!

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

То, что вы хотите сделать, делается с использованием настроек черно-белого. Вы можете получить доступ к ним либо из верхнего меню Изображение > Режим > Черно-белый (Image > Adjustments > Black&White) или в боковой панели справа нажмите на кнопку настроек (как показано на рисунке), а затем нажмите на ЧБ значок, который обозначен черным прямоугольником, разделенным на черное и белое по диагонали.

Шаг 3

Как только вы нажмете эту пиктограмму, вы увидите настройки значений каждого цвета (см. рисунок). Обратите внимание, что Photoshop сохранил всю информацию о цветах в изображении, просто отображает его как ЧБ, но вся ваша информация о цветах сохранена.

Это также дает вам больший контроль по изменению ЧБ, так как вы можете настроить его по каждому цвету отдельно. Но имейте в виду, что вы не должны выходить за пределы допустимых значений цветов слишком далеко, иначе вы начнете видеть неровности и рваные полоски в градиентных областях, таких как небо. Вы увидите это при просмотре изображения немедленно, если начнете слишком сильно двигать ползунки, так что сразу поймете, о чем я сейчас говорю.

Шаг 4

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

Шаг 5

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


Конвертирование изображения в черно-белое на PHP

Именно этого и хочет Странник
Хочет-то он как раз бинаризации
переконвертировать все файлы из цветных в черно белые.

tvat
исходный размер фото полноцвет 198 Кб, после преобразования Grayscale-256 размер стал 202 Кб, а Grayscale-16 вообще 273 Кб
Значит ваша программа где-то с настройками «вход-выход» намудрила.
При переходе в Grayscale у цветного изображения сбрасываются лишние байты, поэтому выходной файл всегда будет получаться меньше. Разумеется если у выходного изображения ничего не меняется в настройках сжатия или еще в чем.

8. tvat , 27.08.2009 13:52
Rainhaart
да какой там мудреж древний АСДС 5.0 он и вариантов сжатия никаких не предлагает после проеобразования в Grayscale
9. Rainhaart , 27.08.2009 15:46
tvat
Значит что-то сам по себе химичит.
Положите где-нибудь ваш исходный JPG, посмотрю что там. А то уже любопытно стало — нарушение закона сохранения, однако.

Именно этого и хочет Странник
Хочет-то он как раз бинаризации
переконвертировать все файлы из цветных в черно белые.

Сдаётся мне, таки градации серого он хочет. У нас народ вообще редко понимает разницу между градациями серого, чёрно-белым и монохромом — так повелось со времён чёрно-белых телевизоров и фотографий.

Добавление от 27.08.2009 16:08:

кстати, автоматическое преобразование в монохром это очень непростая задача

10. Джамаль , 27.08.2009 16:07
11. Rainhaart , 27.08.2009 16:29
Джамаль
У нас народ вообще редко понимает разницу между градациями серого, чёрно-белым и монохромом
Согласен. Но поскольку телепат из меня не очень, то обычно стараюсь отвечать на тот вопрос, который задан, а не на тот, который имелся в виду.
Кстати, монохромное и черно-белое изображение — это одно и то же.

кстати, автоматическое преобразование в монохром это очень непростая задача
_Качественная_ бинаризация — задача действительно не из простых. Здесь софта раз-два и обчелся.
А обычная перегонка на основе заданной точки белого — такое масса программ умеет.

12. Джамаль , 27.08.2009 18:03
Rainhaart
Кстати, монохромное и черно-белое изображение — это одно и то же.

Знаю с фотошопом не первый день общаюсь

_Качественная_ бинаризация — задача действительно не из простых. Здесь софта раз-два и обчелся.
А обычная перегонка на основе заданной точки белого — такое масса программ умеет.

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

13. Rainhaart , 27.08.2009 18:30
Джамаль
У меня, кстати, есть кое-какие собственные наработки по этому поводу — отлаженный алгоритм для более-менее приличной автоматической бинаризации с коррекцией контраста и определением порога
Вау! А дадите на поэкспериментировать?

У меня в последнее время понемногу подбирается коллекция приличных бинаризаторов, сейчас задумываюсь о том, чтобы сделать сводный тест.

14. Джамаль , 27.08.2009 18:35
Rainhaart

Сомневаюсь, что конкретно эта реализация сможет конкурировать — я её под текст затачивал, растр там неприемлем, поэтому серые области на выходе будут однозначно чёрными или однозначно белыми.

15. tvat , 27.08.2009 23:51
Rainhaart
не вопрос
http://tambovfototime.narod.ru/dscn8240.jpg — исходник
http://tambovfototime.narod.ru/DSCN8240Grayscale256.jpg — соответственно Grayscale256
http://tambovfototime.narod.ru/DSCN8240Grayscale16jpg.jpg — Grayscale16
16. Дем , 28.08.2009 02:14
Rainhaart
Кстати, монохромное и черно-белое изображение — это одно и то же.
Строго говоря, монохром может быть и других цветов, например красно-белым.

, 28.08.2009 11:10

цитата (Wikipedia): A monochromatic object or image is one whose range of colors consists of shades of a single color or hue; monochrome images in neutral colors are also known as grayscale or black-and-white.

Вопрос толкования термина.

18. Rainhaart , 28.08.2009 14:02
Джамаль
Сомневаюсь, что конкретно эта реализация сможет конкурировать — я её под текст затачивал, растр там неприемлем, поэтому серые области на выходе будут однозначно чёрными или однозначно белыми.
У меня основная масса обрабатываемых изображений — как раз сканы книг. «Серые» и цветные. Соответственно тестировать собираюсь на книжно-журнальных страницах.
Так что если у вас примерно под то же делалось, то будет очень даже кстати.

200 кб получилось

30 Кб. Конвертировал в Irfan.


Добавление от 28.08.2009 14:12:

Вопрос толкования термина.
Согласен. Но традиционно под «монохромом» все-таки подразумевается именно ч/б.
Аналогично тому, как под просто «солью» (без уточнения) имеется в виду поваренная соль.

Как конвертировать изображение в черно-белое в PHP

Как можно преобразовать изображение в черно-белое в PHP?

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

7 ответов

Использование библиотеки php gd :

Проверьте комментарии пользователей по ссылке выше для большего количества примеров.

Просто округлите оттенки серого до черного или белого.

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

Если вы собираетесь сделать это самостоятельно, вам необходимо реализовать алгоритм дизеринга . Но, как говорит @jonni , использовать существующий инструмент будет намного проще?

Эта функция работает как брелок

Для каждого пикселя вы должны преобразовать цвет в оттенки серого — что-то вроде $ grey = $ red * 0. 299 + зелёный * 0. 587 + синяя * 0. 114; (это весовые коэффициенты NTSC; существуют другие подобные веса). Это имитирует различную чувствительность глаза к разным цветам).

Затем вам нужно выбрать значение отсечения — обычно половину максимального значения пикселя, но в зависимости от изображения вы можете предпочесть более высокое значение (сделать изображение темнее) или меньше (сделать изображение ярче).

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

Имейте в виду, что выполнение этого в PHP будет очень медленным — вы будете намного дальше, чтобы найти библиотеку, которая обеспечивает это.

Блог старого компьютера

Черно-белое изображение средствами PHP

Для использование некоторых других фильтров, необходимо указывать дополнительные параметры. И так вернемся к теме статьи. И так функция:

function gray_photo($src, $dest) <
if (!file_exists($src)) return false;
$size_img = getimagesize($src);
$format = strtolower(substr($size_img[‘mime’], strpos($size_img[‘mime’], ‘/’)+1));
$icfunc = «imagecreatefrom» . $format;
if (!function_exists($icfunc)) return false;
$image = $icfunc($src);
imagefilter($image, IMG_FILTER_GRAYSCALE);
imagejpeg($image, $dest, 95);
>

Функции передается два значения это $src — путь до исходного изображения, $dest — путь до нового изображения. Так же доработав функцию можно передавать ей тип фильтра, и аргументы если нужны (тогда конечно и название функции нужно будет поменять так как она сможет иметь различные возможности).

Пример работы функции можно увидеть в шапке статьи. Готов ответить на все вопросы в комментариях если конечно они возникунт.

Как сделать — черно-белое изображение с помощью CSS

Узнайте, как создать «черно-белое» изображение с помощью CSS.

Черно-белое изображение

Оттенки серого (100%)

Используйте свойство CSS filter для преобразования изображения в Черное и белое.

Пример в градациях серого

Изменить цвет всех изображений на черный и белый (100% серый):

Перейдите на наш CSS Images учебник, чтобы узнать больше о том, как стиль изображений.

Перейдите в наш CSS Filter свойство, чтобы узнать больше о CSS фильтров.

Илон Маск рекомендует:  Что такое код swfdisplayitem &#62;setdepth
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL