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

Форум PHP

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

 

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

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

тема: загнать изображение попиксельно в массив.
 
 автор: Саша88   (16.03.2011 в 17:39)   письмо автору
 
 

Подскажите как загнать изображение попиксельно в массив.

  Ответить  
 
 автор: cheops   (16.03.2011 в 17:58)   письмо автору
 
   для: Саша88   (16.03.2011 в 17:39)
 

Нужно больше подробностей, что будет храниться в массиве (цвет в режиме RGB)?

  Ответить  
 
 автор: Саша88   (16.03.2011 в 18:01)   письмо автору
 
   для: cheops   (16.03.2011 в 17:58)
 

да, цвет в режиме RGB

  Ответить  
 
 автор: cheops   (16.03.2011 в 18:19)   письмо автору
 
   для: Саша88   (16.03.2011 в 18:01)
 

Можно начать отталкиваться от следующего скрипта
<?php
  
// Снимаем ограничение по времени
  
@set_time_limit(0);

  
// Имя файла
  
$filename "1.jpg";
  
// Открываем изображение
  
$im imagecreatefromjpeg($filename);
  
// Получаем размер изображения
  
list($width$height) = getimagesize($filename);
  
  
// Результирующий массив
  
$arr = array();
  for(
$x 0$x $width$x++)
  {
    for(
$y 0$y $height$y++)
    {
      
// Извлекаем цвет точки
      
$rgb imagecolorat($im$x$y);
      
// Помещаем цвет в результирующий массив
      
$arr[$x][$y]['r'] = ($rgb >> 16) & 0xFF;
      
$arr[$x][$y]['g'] = ($rgb >> 8) & 0xFF;
      
$arr[$x][$y]['b'] = $rgb 0xFF;
    }
  }
  
// Результат
  
print_r($arr);
?>

  Ответить  
 
 автор: Саша88   (16.03.2011 в 21:18)   письмо автору
 
   для: cheops   (16.03.2011 в 18:19)
 

Спасибо за пример, а что означает ($rgb >> 16)

  Ответить  
 
 автор: cheops   (16.03.2011 в 21:29)   письмо автору
 
   для: Саша88   (16.03.2011 в 21:18)
 

Функция imagecolorat() возвращает результат в виде целого числа (8 байта), это позволяет хранить красный цвет в 2 байтах (от 0 до 255), зеленый в двух других байтах (от 0 до 255), а синий в третей паре байтов (от 0 до 255) и еще пару байтов в запасе остается (их для полупрозрачности обычно используют). Вот чтобы из такого упакованного числа получить эти три значения, нужно сдвгать биты к границе при помощи битового смещения >> и отрезать пару байтов при помощи битового пересечения & с маской 0xFF, которая отрезает все, кроме нужных двух байт.

PS Это проще представить, если перевести числа из десятичного и шестнадцетиричного формата в двоичный формат.

  Ответить  
 
 автор: Саня   (17.03.2011 в 10:18)   письмо автору
 
   для: cheops   (16.03.2011 в 18:19)
 

Битовые сдвиги жестоко фэйлятся на картинках с индексированной палитрой. Надёжнее пользоваться функцией imagecolorsforindex() во всех случаях (даже для truecolor изображений).

  Ответить  
Rambler's Top100
вверх

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