X-Git-Url: https://git.rapsys.eu/packbundle/blobdiff_plain/df7b4f1cde5b1f7c3534df258047d1581f066134..9cdadd5cc41b1dd89a4cf45fd144594b8855b02d:/Util/FacebookUtil.php diff --git a/Util/FacebookUtil.php b/Util/FacebookUtil.php index ea3393d..18f37d3 100644 --- a/Util/FacebookUtil.php +++ b/Util/FacebookUtil.php @@ -11,93 +11,149 @@ namespace Rapsys\PackBundle\Util; -use Symfony\Component\Asset\PackageInterface; use Symfony\Component\Filesystem\Exception\IOExceptionInterface; use Symfony\Component\Filesystem\Filesystem; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; +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 public url + * The prefix * * @var string */ - protected $url; + protected string $prefix; /** - * The package instance - * - * @var PackageInterface + * The RouterInterface instance */ - protected $package; + protected RouterInterface $router; /** - * The prefix + * The size * - * @var string + * @var int */ - protected $prefix; + 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 osm util + * Creates a new facebook util * - * @param PackageInterface $package The package instance + * @param RouterInterface $router The RouterInterface instance * @param string $cache The cache directory * @param string $path The public path - * @param string $url The public url * @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(PackageInterface $package, string $cache, string $path, string $url, 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 url - $this->url = $url.'/'.$prefix; - - //Set package instance - $this->package = $package; - //Set prefix key $this->prefix = $prefix; + //Set router + $this->router = $router; + + //Set size + $this->size = $size; + //Set source $this->source = $source; + + //Set stroke + $this->stroke = $stroke; + + //Set width + $this->width = $width; } /** @@ -114,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'; @@ -138,8 +204,7 @@ class FacebookUtil { //Return image data return [ - #'og:image' => $this->package->getAbsoluteUrl('@RapsysAir/facebook/'.$mtime.$pathInfo.'.jpeg'), - 'og:image' => $this->package->getAbsoluteUrl($this->url.'/'.$mtime.$pathInfo.'.jpeg'), + 'og:image' => $this->router->generate('rapsys_pack_facebook', ['mtime' => $mtime, 'path' => $pathInfo], UrlGeneratorInterface::ABSOLUTE_URL), 'og:image:alt' => str_replace("\n", ' ', implode(' - ', array_keys($texts))), 'og:image:height' => $height, 'og:image:width' => $width @@ -164,12 +229,6 @@ class FacebookUtil { } } - //Without source - if ($source === null) { - //Set source - $source = realpath($this->source); - } - //Create image object $image = new \Imagick(); @@ -190,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 @@ -227,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; @@ -254,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); @@ -291,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); @@ -338,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); @@ -379,7 +430,7 @@ class FacebookUtil { //Return image data return [ - 'og:image' => $this->package->getAbsoluteUrl($this->url.'/'.stat($path)['mtime'].$pathInfo.'.jpeg'), + 'og:image' => $this->router->generate('rapsys_pack_facebook', ['mtime' => stat($path)['mtime'], 'path' => $pathInfo], UrlGeneratorInterface::ABSOLUTE_URL), 'og:image:alt' => str_replace("\n", ' ', implode(' - ', array_keys($texts))), 'og:image:height' => $height, 'og:image:width' => $width