123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- <?php
- /**
- *--------------------------------------------------------------------
- *
- * Enable to join 2 BCGDrawing or 2 image object to make only one image.
- * There are some options for alignment.
- *
- *--------------------------------------------------------------------
- * Copyright (C) Jean-Sebastien Goupil
- * http://www.barcodephp.com
- */
- class JoinDraw {
- const ALIGN_RIGHT = 0;
- const ALIGN_BOTTOM = 0;
- const ALIGN_LEFT = 1;
- const ALIGN_TOP = 1;
- const ALIGN_CENTER = 2;
- const POSITION_RIGHT = 0;
- const POSITION_BOTTOM = 1;
- const POSITION_LEFT = 2;
- const POSITION_TOP = 3;
- private $image1;
- private $image2;
- private $alignement;
- private $position;
- private $space;
- private $im;
- /**
- * Construct the JoinDrawing Object.
- * - $image1 and $image2 have to be BCGDrawing object or image object.
- * - $space is the space between the two graphics in pixel.
- * - $position is the position of the $image2 depending the $image1.
- * - $alignment is the alignment of the $image2 if this one is smaller than $image1;
- * if $image2 is bigger than $image1, the $image1 will be positionned on the opposite side specified.
- *
- * @param mixed $image1
- * @param mixed $image2
- * @param BCGColor $background
- * @param int $space
- * @param int $position
- * @param int $alignment
- */
- public function __construct($image1, $image2, $background, $space = 10, $position = self::POSITION_RIGHT, $alignment = self::ALIGN_TOP) {
- if ($image1 instanceof BCGDrawing) {
- $this->image1 = $image1->get_im();
- } else {
- $this->image1 = $image1;
- }
- if ($image2 instanceof BCGDrawing) {
- $this->image2 = $image2->get_im();
- } else {
- $this->image2 = $image2;
- }
- $this->background = $background;
- $this->space = (int)$space;
- $this->position = (int)$position;
- $this->alignment = (int)$alignment;
- $this->createIm();
- }
- /**
- * Destroys the image.
- */
- public function __destruct() {
- imagedestroy($this->im);
- }
- /**
- * Finds the position where the barcode should be aligned.
- *
- * @param int $size1
- * @param int $size2
- * @param int $ailgnment
- * @return int
- */
- private function findPosition($size1, $size2, $alignment) {
- $rsize1 = max($size1, $size2);
- $rsize2 = min($size1, $size2);
- if ($alignment === self::ALIGN_LEFT) { // Or TOP
- return 0;
- } elseif ($alignment === self::ALIGN_CENTER) {
- return $rsize1 / 2 - $rsize2 / 2;
- } else { // RIGHT or TOP
- return $rsize1 - $rsize2;
- }
- }
- /**
- * Change the alignments.
- *
- * @param int $alignment
- * @return int
- */
- private function changeAlignment($alignment) {
- if ($alignment === 0) {
- return 1;
- } elseif ($alignment === 1) {
- return 0;
- } else {
- return 2;
- }
- }
- /**
- * Creates the image.
- */
- private function createIm() {
- $w1 = imagesx($this->image1);
- $w2 = imagesx($this->image2);
- $h1 = imagesy($this->image1);
- $h2 = imagesy($this->image2);
- if ($this->position === self::POSITION_LEFT || $this->position === self::POSITION_RIGHT) {
- $w = $w1 + $w2 + $this->space;
- $h = max($h1, $h2);
- } else {
- $w = max($w1, $w2);
- $h = $h1 + $h2 + $this->space;
- }
- $this->im = imagecreatetruecolor($w, $h);
- imagefill($this->im, 0, 0, $this->background->allocate($this->im));
- // We start defining position of images
- if ($this->position === self::POSITION_TOP) {
- if ($w1 > $w2) {
- $posX1 = 0;
- $posX2 = $this->findPosition($w1, $w2, $this->alignment);
- } else {
- $a = $this->changeAlignment($this->alignment);
- $posX1 = $this->findPosition($w1, $w2, $a);
- $posX2 = 0;
- }
- $posY2 = 0;
- $posY1 = $h2 + $this->space;
- } elseif ($this->position === self::POSITION_LEFT) {
- if ($w1 > $w2) {
- $posY1 = 0;
- $posY2 = $this->findPosition($h1, $h2, $this->alignment);
- } else {
- $a = $this->changeAlignment($this->alignment);
- $posY2 = 0;
- $posY1 = $this->findPosition($h1, $h2, $a);
- }
- $posX2 = 0;
- $posX1 = $w2 + $this->space;
- } elseif ($this->position === self::POSITION_BOTTOM) {
- if ($w1 > $w2) {
- $posX2 = $this->findPosition($w1, $w2, $this->alignment);
- $posX1 = 0;
- } else {
- $a = $this->changeAlignment($this->alignment);
- $posX2 = 0;
- $posX1 = $this->findPosition($w1, $w2, $a);
- }
- $posY1 = 0;
- $posY2 = $h1 + $this->space;
- } else { // defaults to RIGHT
- if ($w1 > $w2) {
- $posY2 = $this->findPosition($h1, $h2, $this->alignment);
- $posY1 = 0;
- } else {
- $a = $this->changeAlignment($this->alignment);
- $posY2 = 0;
- $posY1 = $this->findPosition($h1, $h2, $a);
- }
- $posX1 = 0;
- $posX2 = $w1 + $this->space;
- }
- imagecopy($this->im, $this->image1, $posX1, $posY1, 0, 0, $w1, $h1);
- imagecopy($this->im, $this->image2, $posX2, $posY2, 0, 0, $w2, $h2);
- }
- /**
- * Returns the new $im created.
- *
- * @return resource
- */
- public function get_im() {
- return $this->im;
- }
- }
- ?>
|