ok
Direktori : /home2/selectio/www/limpiar.in.net/install/vendor/simplesoftwareio/simple-qrcode/src/ |
Current File : /home2/selectio/www/limpiar.in.net/install/vendor/simplesoftwareio/simple-qrcode/src/ImageMerge.php |
<?php namespace SimpleSoftwareIO\QrCode; use InvalidArgumentException; class ImageMerge { /** * Holds the QrCode image. * * @var Image */ protected $sourceImage; /** * Holds the merging image. * * @var Image */ protected $mergeImage; /** * The height of the source image. * * @var int */ protected $sourceImageHeight; /** * The width of the source image. * * @var int */ protected $sourceImageWidth; /** * The height of the merge image. * * @var int */ protected $mergeImageHeight; /** * The width of the merge image. * * @var int */ protected $mergeImageWidth; /** * Holds the radio of the merging image. * * @var float */ protected $mergeRatio; /** * The height of the merge image after it is merged. * * @var int */ protected $postMergeImageHeight; /** * The width of the merge image after it is merged. * * @var int */ protected $postMergeImageWidth; /** * The position that the merge image is placed on top of the source image. * * @var int */ protected $centerY; /** * The position that the merge image is placed on top of the source image. * * @var int */ protected $centerX; /** * Creates a new ImageMerge object. * * @param $sourceImage Image The image that will be merged over. * @param $mergeImage Image The image that will be used to merge with $sourceImage */ public function __construct(Image $sourceImage, Image $mergeImage) { $this->sourceImage = $sourceImage; $this->mergeImage = $mergeImage; } /** * Returns an QrCode that has been merge with another image. * This is usually used with logos to imprint a logo into a QrCode. * * @param $percentage float The percentage of size relative to the entire QR of the merged image * * @return string */ public function merge($percentage) { $this->setProperties($percentage); $img = imagecreatetruecolor($this->sourceImage->getWidth(), $this->sourceImage->getHeight()); imagealphablending($img, true); $transparent = imagecolorallocatealpha($img, 0, 0, 0, 127); imagefill($img, 0, 0, $transparent); imagecopy( $img, $this->sourceImage->getImageResource(), 0, 0, 0, 0, $this->sourceImage->getWidth(), $this->sourceImage->getHeight() ); imagecopyresampled( $img, $this->mergeImage->getImageResource(), $this->centerX, $this->centerY, 0, 0, $this->postMergeImageWidth, $this->postMergeImageHeight, $this->mergeImageWidth, $this->mergeImageHeight ); $this->sourceImage->setImageResource($img); return $this->createImage(); } /** * Creates a PNG Image. * * @return string */ protected function createImage() { ob_start(); imagepng($this->sourceImage->getImageResource()); return ob_get_clean(); } /** * Sets the objects properties. * * @param $percentage float The percentage that the merge image should take up. * * @return void */ protected function setProperties($percentage) { if ($percentage > 1) { throw new InvalidArgumentException('$percentage must be less than 1'); } $this->sourceImageHeight = $this->sourceImage->getHeight(); $this->sourceImageWidth = $this->sourceImage->getWidth(); $this->mergeImageHeight = $this->mergeImage->getHeight(); $this->mergeImageWidth = $this->mergeImage->getWidth(); $this->calculateOverlap($percentage); $this->calculateCenter(); } /** * Calculates the center of the source Image using the Merge image. * * @return void */ protected function calculateCenter() { $this->centerX = intval(($this->sourceImageWidth / 2) - ($this->postMergeImageWidth / 2)); $this->centerY = intval(($this->sourceImageHeight / 2) - ($this->postMergeImageHeight / 2)); } /** * Calculates the width of the merge image being placed on the source image. * * @param float $percentage * * @return void */ protected function calculateOverlap($percentage) { $this->mergeRatio = round($this->mergeImageWidth / $this->mergeImageHeight, 2); $this->postMergeImageWidth = intval($this->sourceImageWidth * $percentage); $this->postMergeImageHeight = intval($this->postMergeImageWidth / $this->mergeRatio); } }