Наложение маски на изображение

При наложении маски исходное изображение будет обрезано по
форме маски, в роли которой может любая картинка, допустимого
формата – jpeg, jpg, png, gif. Картинка-маска должна иметь
однотонный цвет в области, которая будет сохранена, например
черный. А все остальное, что будет удалено, должно иметь любой
другой цвет, главное не черный.
Таким образом, имея две картинки – исходную и маску, мы можем
сделать наложение. Для наложения маски нет специальных
функций, но можно попиксельно перенести исходную картинку на
чистый холст, предварительно проверяя цвет пикселя у картинки-
маски по тем же координатам.
Пример:
// исходная картинка 
$image = "test.jpg";  
// картинка маска 
$mask = "mask.png"; 
 
// загружаем исходную картинку 
$image = imagecreatefromjpeg($image);  
// загружаем маску 
$mask = imagecreatefrompng($mask);  
// определяем ширину картинки 
$width =  imagesx($image);  
// определяем высоту картинки 
$height = imagesy($image);  
// определяем ширину маски 
$m_width =  imagesx($mask);  
// определяем высоту маски 
$m_height = imagesy($mask);  
 
// создаем холст для будущей картинки 
$img = imagecreatetruecolor($width, $height);  
// определяем прозрачный цвет для картинки. Черный 
$transColor = imagecolorallocate($img, 0, 0, 0);  
// задаем прозрачность для картинки 
imagecolortransparent($img, $transColor);  
 
// перебираем исходную картинку по пикселю 
for($posX = 0; $posX < $width; $posX++){  
  for($posY = 0; $posY < $height; $posY++){ 
    // получаем индекс цвета пикселя  
  // в координате $posX, $posY для картинки 
    $colorIndex = imagecolorat($image, $posX, $posY);  
    // получаем цвет по его индексу в формате RGB 
    $colorImage = imagecolorsforindex( 
  $image, $colorIndex 
  );  
    // получаем индекс цвета пикселя  
  // в координате $posX, $posY для маски 
    $colorIndex = imagecolorat($mask, $posX, $posY);  
    // получаем цвет по его индексу в формате RGB 
    $maskColor = imagecolorsforindex($mask, $colorIndex 
  ); 
    // если в точке $posX, $posY цвет маски черный,   
 
    // то наносим на холст пиксель с нужным цветом 
    if ( 
    // проверка пикселя на черный цвет 
    $maskColor['red'] == 0 AND  
    $maskColor['green'] == 0 AND  
    $maskColor['blue'] == 0 AND 
    // если размер маски меньше исходной картинки, 
    // то за ее пределами тоже ни чего не рисуем 
    $m_width > $posX AND  
    $m_height > $posY 
     ){ 
    // получаем цвет для пикселя 
    $colorIndex = imagecolorallocate( 
      $img, 
      $colorImage['red'],  
      $colorImage['green'],  
      $colorImage['blue'] 
    );  
    // рисуем пиксель 
    imagesetpixel( 
$img, $posX, $posY, $colorIndex 
);  
    }  
  } 
} 
   
// заголовок для браузера 
header('Content-type: image/png');  
// выводим картинку в браузере 
imagepng($img);  
// чистим память 
imagedestroy($img);


В рецепте использовалось несколько ранее не описанных функций,
о каждой по порядку.
Imagesx и imagesy – получают ширину и высоту изображения.
imagecolortransparent – определяет выбранный цвет как
прозрачный.
124

imagecolorat – получает индекс цвет а пикселя по заданным
координатам.
imagecolorsforindex – получает цвета в формате RGBA,
соответствующие индексу.
imagesetpixel – рисует пиксель по заданным координатам.
Теги:
Imagesx, imagesy, imagecolortransparent, imagecolorat, imagecolorsforindex, imagesetpixel
Добавлено: 28 Марта 2018 13:47:48 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...