Welcome to php club

PHP FAQ from PHPclub.ru: Image/Color2GrayScale ...

Начало | Каталог | Изменения | НовыеКомментарии | Вам запрещён доступПользователи | Вам запрещён доступРегистрация | Вход:  Пароль:  

Работа с графикой => Color2GrayScale

Функция для преобразования цветного изображения в чёрно-белое


Функция Color2GrayScale() используется для конвертации цветного изображения в чёрно-белое.


Оглавление документа

Описание функции


void Color2GrayScale(resource &$img, bool $dither = true);


Функция Color2GrayScale() используется для конвертации цветного изображения в чёрно-белое.


Замечание при конвертировании изображений TrueColor, эти изображения будут преобразованы в изображения с палитрой размером 256 цветов.


Эта функция ничего не возвращает.


$img – идентификатор ресурса Вашего изображения.


$dither – если исходное изображение – изображение TrueColor, то следует ли применять «дрожание» при конвертировании его в изображение с палитрой. Если этот аргумент равен TRUE, то будет применено «дрожание», что приведёт к более пятнистому изображению, но с лучшим приближением цвета. Смотрите также imagetruecolortopalette.


Для работы функции требуется установленная библиотека http://php.net/GD 2.0.1 или более поздняя.


Функцию можно использовать для РНР 4 >= 4.0.6 или более поздние версии.


Для PHP5 можно использовать новую встроенную функцию
imagefilter ($im, IMG_FILTER_GRAYSCALE);

Исходный текст функции. Вариант 1.


<?php
function Color2GrayScale(&$img$dither true)
// by SiMM
{
  if (!(
$i imagecolorstotal($img)))
    
imagetruecolortopalette($img$dither$i 256);
  while (
$i--) {
    
$c imagecolorsforindex($img,$i);
    
// формула взята с http://www.computerra.ru/print/softerra/technologizm/21208/
    
$c 0.299*$c['red'] + 0.587*$c['green'] + 0.114*$c['blue'];
    
imagecolorset($img,$i,$c,$c,$c);
  }
}
?>

Исходный текст функции. Вариант 2.


<?php
function Color2GrayScale(&$img$dither true)
//http://php.net/manual/en/function.imagecolorsforindex.php#41842
//Функция переделана по образцу SiMM
{
  if (!(
$i imagecolorstotal($img)))
    
imagetruecolortopalette($img$dither$i 256);
  while (
$i--) {
    
$c imagecolorsforindex($img$i);
    
$min min($c['red'],$c['green'],$c['blue']);
    
$max max($c['red'],$c['green'],$c['blue']);
    
$c = ($max+$min)/2;
    
imagecolorset($img$i$c$c$c);
  }
}
?>


Этот вариант отличается от предыдущего способом вычисления серого значения цвета.


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

Пример применения функции.


<?php

  
// загружаем файл и создаём ресурс с изображением
  
$img_file 'http://www.aleksey.com/xmlsec/images/bart.gif';
  
$img imagecreatefromstring(file_get_contents($img_file));

  
// преобразуем изображение в чёрно-белое
  
Color2GrayScale($img);

  
//выдаём изображение в браузер
  
header("Content-type: image/gif");
  
imagegif($img);

?>

Дополнительная информация


Функция, которая возвращает RGB-компоненты цвета элемента палитры с заданным индексом
http://php.net/imagecolorsforindex


Функция, которая возвращает количество цветов в палитре
http://php.net/imagecolorstotal


Функция для преобразования изображения TrueColor в палитровое изображение
http://php.net/imagetruecolortopalette


О представлении цветного изображения в телевидении и в компьютерной технике
http://www.computerra.ru/print/softerra/technologizm/21208/


Обсуждение функции Color2GrayScale() на форуме РНР-клуба
http://phpclub.ru/talk/showthread.php?postid=614571#post614571
http://phpclub.ru/talk/showthread.php?postid=516798#post516798


 
Комментариев нет. [Показать комментарии/форму]