Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблемы с палитрой в gdlib
 
 автор: CBE4KuH   (02.03.2008 в 02:44)   письмо автору
 
 

Народ, подскажите пожалуйста, как изменить палитру *.png рисунка в оттенки серого средствами gdlib?

   
 
 автор: CBE4KuH   (02.03.2008 в 12:02)   письмо автору
 
   для: CBE4KuH   (02.03.2008 в 02:44)
 

Неужели никто не знает?

   
 
 автор: sim5   (02.03.2008 в 12:11)   письмо автору
 
   для: CBE4KuH   (02.03.2008 в 12:02)
 


<?php
//функция преобразования в серый цвет
//по цветовой модели YIQ
//задается с помощью установки значений трех параметров:
//Y - интенсивности (luminance,) 
//и двух цветностей I и Q 
//на этом базируется представления цвета в ТВ.
//Здесь RGB значения цветов берутся
//с соответсвующими весовыми коэффициентами
function gray($r,$g,$b) {
  return ((
$r*0.299)+($g*0.587)+($b*0.114));
}

//открываем файл для конвертирования
$file "image.png";
//заголовoк 
header('Content-type: image/png');
//получаем размеры изображения
list($width$height) = getimagesize($file);
//cоздаем изображение png из файла
$sourceimage imagecreatefrompng($file);
//cоздаем холст
$grayimage imagecreate($width$height);
//cоздаем 256-цветную палитру
for ($c=0$c<256$c++) {
  
$palette[$c] = imagecolorallocate($grayimage,$c,$c,$c);
}
//считываем исходное изображение попиксельно
for ($y=0$y<$height ;$y++)    {
  for (
$x=0$x<$width$x++) {
     
//возвращаем индекс цвета пикселя в цветовой палитре
     
$rgb imagecolorat($sourceimage,$x,$y);
     
$r = ($rgb >> 16) & 0xFF;
     
$g = ($rgb >> 8) & 0xFF;
     
$b $rgb 0xFF;
     
//изменяем палитру цветного изображения в серое
     
$gs gray($r,$g,$b);
     
imagesetpixel($grayimage,$x,$y,$palette[$gs]);
  }
}
//вывод в браузер
imagepng($grayimage);
//освобождаем память
imagedestroy($grayimage);
?>

Не проверял, но должно работать, ну если будут ошибки, можно подправить.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования