155 lines
4.3 KiB
PHP
155 lines
4.3 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
*--------------------------------------------------------------------
|
||
|
*
|
||
|
* Holds font for PHP.
|
||
|
*
|
||
|
*--------------------------------------------------------------------
|
||
|
* @author Akhtar Khan <er.akhtarkhan@gmail.com>
|
||
|
* @link http://www.codeitnow.in
|
||
|
* @package https://github.com/codeitnowin/barcode-generator
|
||
|
*/
|
||
|
namespace CodeItNow\BarcodeBundle\Generator;
|
||
|
use CodeItNow\BarcodeBundle\Generator\CINFont;
|
||
|
use CodeItNow\BarcodeBundle\Generator\CINColor;
|
||
|
|
||
|
class CINFontPhp implements CINFont {
|
||
|
private $font;
|
||
|
private $text;
|
||
|
private $rotationAngle;
|
||
|
private $backgroundColor;
|
||
|
private $foregroundColor;
|
||
|
|
||
|
/**
|
||
|
* Constructor.
|
||
|
*
|
||
|
* @param int $font
|
||
|
*/
|
||
|
public function __construct($font) {
|
||
|
$this->font = max(0, intval($font));
|
||
|
$this->backgroundColor = new CINColor('white');
|
||
|
$this->foregroundColor = new CINColor('black');
|
||
|
$this->setRotationAngle(0);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Gets the text associated to the font.
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getText() {
|
||
|
return $this->text;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Sets the text associated to the font.
|
||
|
*
|
||
|
* @param string text
|
||
|
*/
|
||
|
public function setText($text) {
|
||
|
$this->text = $text;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Gets the rotation in degree.
|
||
|
*
|
||
|
* @return int
|
||
|
*/
|
||
|
public function getRotationAngle() {
|
||
|
return (360 - $this->rotationAngle) % 360;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Sets the rotation in degree.
|
||
|
*
|
||
|
* @param int
|
||
|
*/
|
||
|
public function setRotationAngle($rotationAngle) {
|
||
|
$this->rotationAngle = (int)$rotationAngle;
|
||
|
if ($this->rotationAngle !== 90 && $this->rotationAngle !== 180 && $this->rotationAngle !== 270) {
|
||
|
$this->rotationAngle = 0;
|
||
|
}
|
||
|
|
||
|
$this->rotationAngle = (360 - $this->rotationAngle) % 360;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Gets the background color.
|
||
|
*
|
||
|
* @return CINColor
|
||
|
*/
|
||
|
public function getBackgroundColor() {
|
||
|
return $this->backgroundColor;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Sets the background color.
|
||
|
*
|
||
|
* @param CINColor $backgroundColor
|
||
|
*/
|
||
|
public function setBackgroundColor($backgroundColor) {
|
||
|
$this->backgroundColor = $backgroundColor;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Gets the foreground color.
|
||
|
*
|
||
|
* @return CINColor
|
||
|
*/
|
||
|
public function getForegroundColor() {
|
||
|
return $this->foregroundColor;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Sets the foreground color.
|
||
|
*
|
||
|
* @param CINColor $foregroundColor
|
||
|
*/
|
||
|
public function setForegroundColor($foregroundColor) {
|
||
|
$this->foregroundColor = $foregroundColor;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the width and height that the text takes to be written.
|
||
|
*
|
||
|
* @return int[]
|
||
|
*/
|
||
|
public function getDimension() {
|
||
|
$w = imagefontwidth($this->font) * strlen($this->text);
|
||
|
$h = imagefontheight($this->font);
|
||
|
|
||
|
$rotationAngle = $this->getRotationAngle();
|
||
|
if ($rotationAngle === 90 || $rotationAngle === 270) {
|
||
|
return array($h, $w);
|
||
|
} else {
|
||
|
return array($w, $h);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Draws the text on the image at a specific position.
|
||
|
* $x and $y represent the left bottom corner.
|
||
|
*
|
||
|
* @param resource $im
|
||
|
* @param int $x
|
||
|
* @param int $y
|
||
|
*/
|
||
|
public function draw($im, $x, $y) {
|
||
|
if ($this->getRotationAngle() !== 0) {
|
||
|
if (!function_exists('imagerotate')) {
|
||
|
throw new CINDrawException('The method imagerotate doesn\'t exist on your server. Do not use any rotation.');
|
||
|
}
|
||
|
|
||
|
$w = imagefontwidth($this->font) * strlen($this->text);
|
||
|
$h = imagefontheight($this->font);
|
||
|
$gd = imagecreatetruecolor($w, $h);
|
||
|
imagefilledrectangle($gd, 0, 0, $w - 1, $h - 1, $this->backgroundColor->allocate($gd));
|
||
|
imagestring($gd, $this->font, 0, 0, $this->text, $this->foregroundColor->allocate($gd));
|
||
|
$gd = imagerotate($gd, $this->rotationAngle, 0);
|
||
|
imagecopy($im, $gd, $x, $y, 0, 0, imagesx($gd), imagesy($gd));
|
||
|
} else {
|
||
|
imagestring($im, $this->font, $x, $y, $this->text, $this->foregroundColor->allocate($im));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
?>
|