Инструменты вебмастера
Инструменты вебмастера Набор онлайн инструментов для вебмастера
Вход
» » Автоматическая корректировка яркости и контрастности средствами PHP

Автоматическая корректировка яркости и контрастности средствами PHP

Данный php скрипт предназначен для автоматической нормализации изображений. Скрипт сам определяет и высчитывает уровни яркости и контрастности, и в зависимости от результатов, уменьшает или увеличивает яркость и контрастность изображения.

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

Изображение до обработки, и после обработки скриптом:
Результат работы скрипта

Требования: PHP5 и библиотека GD2.
В принципе, на локальном Денвере работает без проблем, если на хостинге возникнут проблемы, то следует написать в службу поддержки вашего хостинга, с просьбой подключить библиотеку GD2 и обновить до версии 2.0.
Учтите, что при обработки больших изображений потребуются значительные ресурсы и время затраченное на выполнение задания.

<?php

// Размер временного изображения (в зависимости от мощности вашего сервера)
$taille_echant = 70;

// Путь к файлу изображения
$url_img = 'name.jpg';

// Определить формат изображения $img
$part = pathinfo($url_img);
$ext = strtolower($part['extension']);
if ($ext == "jpg" or $ext == "jpeg") $img = imagecreatefromjpeg($url_img);
if ($ext == "gif") $img = imagecreatefromgif($url_img);
if ($ext == "png") $img = imagecreatefrompng($url_img);

// Определяем размер изображения
list($x, $y) = getimagesize($url_img);

// Создаем небольшое временное изображение, чтобы предотвратить перегрузку сервера.
$img3 = imagecreatetruecolor($taille_echant,$taille_echant);
imagecopyresampled($img3, $img, 0, 0, 0, 0, $taille_echant, $taille_echant, $x, $y);

// Максимальные значение, калькуляции
$noir = 255;
for( $x = 0; $x < $taille_echant; $x = $x + 1 ) { 
 for( $y = 0; $y < $taille_echant; $y = $y + 1 ) { 
   $color_index = imagecolorat($img3, $x, $y);
   $c = ImageColorsForIndex( $img3, $color_index );
   $t = ($c["red"] + $c["green"] + $c["blue"])/3;
   if ($t<$noir) $noir = $t;
   if ($t>$blanc) $blanc = $t;
 }
}
$blanc = 255 - $blanc;
 
if ($noir > $blanc) {
 // Если низкая яркость и контрастность
 imagefilter ($img, IMG_FILTER_CONTRAST, (-$noir+$blanc) / 10 );
 imagefilter ($img, IMG_FILTER_BRIGHTNESS, (-$noir+$blanc) / 5);

} else {
 // Если слишком высокая яркость и контрастность
 imagefilter ($img, IMG_FILTER_CONTRAST, (-$blanc-$noir) / 10 );
 imagefilter ($img, IMG_FILTER_BRIGHTNESS, ($blanc-$noir) / 6);
}

// Теперь вы можете отобразить или сохранить изображение с помощью $img
//В этом примере сохраним изображение преобразуя его в формат jpg и даем новое имя
imagealphablending($img, true);
imagejpeg($img, 'new_img.jpg');

// освобождаем память
imagedestroy($img);
 
?>


В принципе, ничего настраивать не нужно - установили и пользуйтесь.
Не нравится
Нравится
+66
Комментарии (0)
Добавить комментарий
Прокомментировать
Кликните на изображение чтобы обновить код, если он неразборчив