Exemple #1
0
 /**
  * {@inheritdoc}
  *
  * @return ImageInterface
  */
 public function applyMask(ImageInterface $mask)
 {
     if (!$mask instanceof self) {
         throw new InvalidArgumentException('Cannot mask non-gd images');
     }
     $size = $this->getSize();
     $maskSize = $mask->getSize();
     if ($size != $maskSize) {
         throw new InvalidArgumentException(sprintf('The given mask doesn\'t match current image\'s size, Current mask\'s dimensions are %s, while image\'s dimensions are %s', $maskSize, $size));
     }
     for ($x = 0, $width = $size->getWidth(); $x < $width; $x++) {
         for ($y = 0, $height = $size->getHeight(); $y < $height; $y++) {
             $position = new Point($x, $y);
             $color = $this->getColorAt($position);
             $maskColor = $mask->getColorAt($position);
             $round = (int) round(max($color->getAlpha(), (100 - $color->getAlpha()) * $maskColor->getRed() / 255));
             if (false === imagesetpixel($this->resource, $x, $y, $this->getColor($color->dissolve($round - $color->getAlpha())))) {
                 throw new RuntimeException('Apply mask operation failed');
             }
         }
     }
     return $this;
 }