refactor: susun semula struktur folder — Laravel source ke src/
This commit is contained in:
204
vendor/simplesoftwareio/simple-qrcode/src/ImageMerge.php
vendored
Normal file
204
vendor/simplesoftwareio/simple-qrcode/src/ImageMerge.php
vendored
Normal file
@@ -0,0 +1,204 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user