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

Тема в разделе "PHP", создана пользователем dandandan, 4 сен 2010.

Модераторы: latteo
  1. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    991
    Симпатии:
    267
    Стоит задача конвертировать изображение в черно-белое (можно с оттенками серого) стандартными средствами php.


    Гугл помог. Как это сделать с помощью библиотеки gd - я нашел. Выкладываю, может кому пригодится.
    PHP:
    function grayscale($filename){
      
    //Получаем размеры изображения
      
    $img_size GetImageSize($filename);
      
    $width $img_size[0];
      
    $height $img_size[1];
      
    //Создаем новое изображение с такмими же размерами
      
    $img imageCreate($width,$height);
      
    //Задаем новому изображению палитру "оттенки серого" (grayscale)
      
    for ($c 0$c 256$c++) {
        
    ImageColorAllocate($img$c,$c,$c);
      }
      
    //Содаем изображение из файла Jpeg
      
    $img2 ImageCreateFromJpeg($filename);
      
    //Объединяем два изображения
      
    ImageCopyMerge($img,$img2,0,0,0,0$width$height100);
      
    //Сохраняем полученное изображение
      
    imagejpeg($img$filename);
     
    //Освобождаем память, занятую изображением
      
    imagedestroy($img);
    }
    Этот метод сохраняет изображения в черно-белой гамме. Например, при загрузке файлов на сервер.

    Если же, к примеру, у вас на сервере хранятся цветные изображения, а вам по некоторым причинам решительно захотелось «отдать» их браузеру как черно-белые. Воспользуйтесь следующей модификацией этого метода:
    PHP:
    function show_grayscale($filename){
      
    $img_size GetImageSize($filename);
      
    $width $img_size[0];
      
    $height $img_size[1];
      
    $img imageCreate($width,$height);
      for (
    $c 0$c 256$c++) {
        
    ImageColorAllocate($img$c,$c,$c);
      }
      
    $img2 ImageCreateFromJpeg($filename);
      
    ImageCopyMerge($img,$img2,0,0,0,0$width$height100);
      
    //Отдаем полученное изображение браузеру
      
    header("Content-type: image/jpeg");
      
    imagejpeg($img);
      
      
    imagedestroy($img);
    }
     
    Mons нравится это.
  2. Mons

    Mons

    Регистр.:
    2 апр 2006
    Сообщения:
    1.589
    Симпатии:
    916
    Было бы не плохо для начинающих привести готовый пример.
    Не все сразу могут догнать что $filename тот же самый еще нужно задать ))
     
  3. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    есть мини фотошоп, для пхп
    скласс в котором очень качественные наработки...
    с классом идет масса примеров
    Перейти по ссылке
     
    zss нравится это.
  4. denuser

    denuser Прохожие

    Спасибо. Единственное, не советую отдавать сразу в браузер, нагрузка при нескольких картинках получается не маленькая, лучше все таки продумать простенькое кеширование.
     
  5. UDAV

    UDAV

    Регистр.:
    22 июн 2007
    Сообщения:
    776
    Симпатии:
    153
    Для таких целей лучше JavaScript использовать.

    Вот например дофига всяких эффектов можно наложить на стороне пользователя и не грузить сервак
    Перейти по ссылке
    Перейти по ссылке
     
  6. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    PHP:
    $im imagecreatefrompng('test.png');
    imagefilter($imIMG_FILTER_GRAYSCALE);
    так не пробовал?
     
    dandandan нравится это.
  7. Sokol777

    Sokol777 Постоялец

    Регистр.:
    10 янв 2008
    Сообщения:
    57
    Симпатии:
    6
    Простенькая функция
    PHP:
    function Color2GrayScale(&$img$dither true)
    {
      if (!(
    $i imagecolorstotal($img)))
        
    imagetruecolortopalette($img$dither$i 256);
      while (
    $i--) {
        
    $c imagecolorsforindex($img,$i);
        
    $c 0.299*$c['red'] + 0.587*$c['green'] + 0.114*$c['blue'];
        
    imagecolorset($img,$i,$c,$c,$c);
      }
    }
     
  8. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    зачем изобретать велосипед, если есть imagefilter?