Работа с изображением средствами PHP. Получение цвета пикселя
Предисловие
В своё время появилась функция в Яндекс.Браузер: вкладки красились в цвет favicon.
И мне так это понравилось, что я даже решил поиграться с картинками на PHP.
Хочу отметить, что Вам понадобятся установить библиотеку функций изображений GD.
Реализация
Допустим, что надо получить количество белых пикселей на загружаемых фото.
Делать будем в одном скрипте и вывод формы, и саму реализацию.
<form action="/" enctype="multipart/form-data" method="post">
<input type="file" name="foto" />
<input type="submit" name="submit" />
</form>
Думаю всё понятно. Форма самая обычная, не забываем про параметр
enctype="multipart/form-data"
- он необходим для отправки файла.
Укажем список mime типов. Я их просто скопировал в массив.
$mime = [
'image/png',
'image/jpeg',
'image/jpg',
'image/gif',
'image/bmp',
'image/vnd.microsoft.icon',
'image/tiff',
'image/tiff',
'image/svg+xml',
'image/svg+xml',
];
Далее проверим, была ли отправлена форма с данными.
if($_POST['submit'])
{
...
}
Внутри условия реализуем код.
Для начала объявим начальное количество белых пикселей, их 0:
$sum = 0;
Объявим имя файла. Присвоим временное имя файла tmp_name
.
$name = $_FILES['foto']['tmp_name'];
Получим mime и размеры файла. С помощью getimagesize
$sizes = getimagesize($name);
Проверяем есть ли в массиве $mime
значение mime нашего файла.
if(in_array($sizes['mime'], $mime)){
}
Если всё хорошо с mime, то получим тип файла.
Первым делом из mime получаем тип расширения файла.
Сегодня мы будем работать с png или jpeg.
Далее, в зависимости от типа, создаём изображение из загружаемого.
$type = explode('/', $sizes['mime']);
if($type[1] == 'png')
{
$photo = imagecreatefrompng($name);
}elseif($type[1] == 'jpeg')
{
$photo = imagecreatefromjpeg($name);
}
Затем проходим циклом каждый пиксель по ширине и высоте.
Выше мы получали параметры фото, из них получим ширину - индекс 0, и высоту - индекс 1.
for($w = 0; $w <= $sizes[0]; $w++)
{
for($h=0; $h <= $sizes[1]; $h++)
{
}
}
$color = imagecolorat($photo, $w, $h);
// получаем цвета
$arr_col = imagecolorsforindex($photo, $color);
if($arr_col['red'] == 255 and $arr_col['green'] == 255 and $arr_col['blue'] == 255)
{
$sum = $sum + 1;
}
Получаем индекс пикселя. Через функцию imagecolorat
С помощью imagecolorsforindex получаем ассоциативный массив с ключами red(красный), green(зелёный) и blue(синий).
Если все три значения равны 225, то плюсуем к переменной $sum
.
$color = imagecolorat($photo, $w, $h);
// получаем цвета
$arr_col = imagecolorsforindex($photo, $color);
if($arr_col['red'] == 255 and $arr_col['green'] == 255 and $arr_col['blue'] == 255)
{
$sum = $sum + 1;
}
Заключение
Вот так, просто мы получим количество белых пикселей. С помощью двух основных функций imagecolorat и imagecolorsforindex. Как именно реализовать это решение каждого. Дерзайте!!)) Создавайте великое)))
Материал подготовлен автором @zheev