X-Git-Url: https://git.rapsys.eu/packbundle/blobdiff_plain/17218a9f78d87562272e141d6d16597a2d5866e9..c16e5e775be790ef50b68eacb8c40e3b9c70fb3c:/Util/FacebookUtil.php diff --git a/Util/FacebookUtil.php b/Util/FacebookUtil.php index e2c891c..18f37d3 100644 --- a/Util/FacebookUtil.php +++ b/Util/FacebookUtil.php @@ -20,45 +20,87 @@ use Symfony\Component\Routing\RouterInterface; * Helps manage facebook images */ class FacebookUtil { + /** + * The align + * + * @var string + */ + protected string $align; + /** * The cache directory * * @var string */ - protected $cache; + protected string $cache; + + /** + * The fill + * + * @var string + */ + protected string $fill; + + /** + * The font + * + * @var string + */ + protected string $font; /** * The fonts array * * @var array */ - protected $fonts; + protected array $fonts; /** * The public path * * @var string */ - protected $path; + protected string $path; /** * The prefix * * @var string */ - protected $prefix; + protected string $prefix; /** * The RouterInterface instance */ protected RouterInterface $router; + /** + * The size + * + * @var int + */ + protected int $size; + /** * The source * + * @var ?string + */ + protected ?string $source; + + /** + * The stroke + * * @var string */ - protected $source; + protected string $stroke; + + /** + * The width + * + * @var int + */ + protected int $width; /** * Creates a new facebook util @@ -67,25 +109,51 @@ class FacebookUtil { * @param string $cache The cache directory * @param string $path The public path * @param string $prefix The prefix + * @param ?string $source The source + * @param array $fonts The fonts + * @param string $font The font + * @param int $size The size + * @param int $width The width + * @param string $fill The fill + * @param string $stroke The stroke + * @param string $align The align */ - function __construct(RouterInterface $router, string $cache = '../var/cache', string $path = './bundles/rapsyspack', string $prefix = 'facebook', string $source = 'png/facebook.png', array $fonts = [ 'default' => 'ttf/default.ttf' ]) { + function __construct(RouterInterface $router, string $cache = '../var/cache', string $path = './bundles/rapsyspack', string $prefix = 'facebook', ?string $source = null, array $fonts = [ 'default' => 'ttf/default.ttf' ], string $font = 'default', int $size = 60, int $width = 15, string $fill = 'white', string $stroke = '#00c3f9', string $align = 'center') { + //Set align + $this->align = $align; + //Set cache $this->cache = $cache.'/'.$prefix; + //Set fill + $this->fill = $fill; + + //Set font + $this->font = $font; + //Set fonts $this->fonts = $fonts; //Set path $this->path = $path.'/'.$prefix; + //Set prefix key + $this->prefix = $prefix; + //Set router $this->router = $router; - //Set prefix key - $this->prefix = $prefix; + //Set size + $this->size = $size; //Set source $this->source = $source; + + //Set stroke + $this->stroke = $stroke; + + //Set width + $this->width = $width; } /** @@ -102,6 +170,16 @@ class FacebookUtil { * @return array The image array */ public function getImage(string $pathInfo, array $texts, int $updated, ?string $source = null, int $width = 1200, int $height = 630): array { + //Without source + if ($source === null && $this->source === null) { + //Return empty image data + return []; + //Without local source + } elseif ($source === null) { + //Set local source + $source = $this->source; + } + //Set path file $path = $this->path.$pathInfo.'.jpeg'; @@ -151,12 +229,6 @@ class FacebookUtil { } } - //Without source - if ($source === null) { - //Set source - $source = realpath($this->source); - } - //Create image object $image = new \Imagick(); @@ -177,7 +249,17 @@ class FacebookUtil { } } + //Without source + if (!is_file($source)) { + //Throw error + throw new \Exception(sprintf('Source file "%s" do not exists', $this->source)); + } + + //Convert to absolute path + $source = realpath($source); + //Read image + //XXX: Imagick::readImage only supports absolute path $image->readImage($source); //Crop using aspect ratio @@ -214,24 +296,6 @@ class FacebookUtil { 'right' => \Imagick::ALIGN_RIGHT ]; - //Set default font - $defaultFont = 'dejavusans'; - - //Set default align - $defaultAlign = 'center'; - - //Set default size - $defaultSize = 60; - - //Set default stroke - $defaultStroke = '#00c3f9'; - - //Set default width - $defaultWidth = 15; - - //Set default fill - $defaultFill = 'white'; - //Init counter $i = 1; @@ -241,16 +305,16 @@ class FacebookUtil { //Draw each text stroke foreach($texts as $text => $data) { //Set font - $draw->setFont($this->fonts[$data['font']??$defaultFont]); + $draw->setFont($this->fonts[$data['font']??$this->font]); //Set font size - $draw->setFontSize($data['size']??$defaultSize); + $draw->setFontSize($data['size']??$this->size); //Set stroke width - $draw->setStrokeWidth($data['width']??$defaultWidth); + $draw->setStrokeWidth($data['width']??$this->width); //Set text alignment - $draw->setTextAlignment($align = ($aligns[$data['align']??$defaultAlign])); + $draw->setTextAlignment($align = ($aligns[$data['align']??$this->align])); //Get font metrics $metrics = $image->queryFontMetrics($draw, $text); @@ -278,10 +342,10 @@ class FacebookUtil { $texts[$text]['y'] = $data['y'] += $metrics['ascender'] - $metrics['textHeight']/2; //Set stroke color - $draw->setStrokeColor(new \ImagickPixel($data['stroke']??$defaultStroke)); + $draw->setStrokeColor(new \ImagickPixel($data['stroke']??$this->stroke)); //Set fill color - $draw->setFillColor(new \ImagickPixel($data['stroke']??$defaultStroke)); + $draw->setFillColor(new \ImagickPixel($data['stroke']??$this->stroke)); //Add annotation $draw->annotation($data['x'], $data['y'], $text); @@ -325,16 +389,16 @@ class FacebookUtil { //Draw each text foreach($texts as $text => $data) { //Set font - $draw->setFont($this->fonts[$data['font']??$defaultFont]); + $draw->setFont($this->fonts[$data['font']??$this->font]); //Set font size - $draw->setFontSize($data['size']??$defaultSize); + $draw->setFontSize($data['size']??$this->size); //Set text alignment - $draw->setTextAlignment($aligns[$data['align']??$defaultAlign]); + $draw->setTextAlignment($aligns[$data['align']??$this->align]); //Set fill color - $draw->setFillColor(new \ImagickPixel($data['fill']??$defaultFill)); + $draw->setFillColor(new \ImagickPixel($data['fill']??$this->fill)); //Add annotation $draw->annotation($data['x'], $data['y'], $text);