X-Git-Url: https://git.rapsys.eu/packbundle/blobdiff_plain/df7b4f1cde5b1f7c3534df258047d1581f066134..177b09c72785e869d93602ac47524a31dd64a94b:/Util/FacebookUtil.php diff --git a/Util/FacebookUtil.php b/Util/FacebookUtil.php index ea3393d..91664d1 100644 --- a/Util/FacebookUtil.php +++ b/Util/FacebookUtil.php @@ -11,93 +11,67 @@ 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 cache directory - * - * @var string + * The default fonts */ - protected $cache; + const fonts = [ 'default' => 'ttf/default.ttf' ]; /** - * The fonts array - * - * @var array + * The default font */ - protected $fonts; + const font = 'default'; /** - * The public path - * - * @var string + * The default font size */ - protected $path; + const size = 60; /** - * The public url - * - * @var string + * The default width */ - protected $url; + const width = 15; /** - * The package instance - * - * @var PackageInterface + * The default fill */ - protected $package; + const fill = 'white'; /** - * The prefix - * - * @var string + * The default stroke */ - protected $prefix; + const stroke = '#00c3f9'; /** - * The source - * - * @var string + * The default align */ - protected $source; + const align = 'center'; /** - * 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' ]) { - //Set cache - $this->cache = $cache.'/'.$prefix; - - //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 source - $this->source = $source; + function __construct(protected RouterInterface $router, protected string $cache = '../var/cache', protected string $path = './bundles/rapsyspack', protected string $prefix = 'facebook', protected ?string $source = null, protected array $fonts = self::fonts, protected string $font = self::font, protected int $size = self::size, protected int $width = self::width, protected string $fill = self::fill, protected string $stroke = self::stroke, protected string $align = self::align) { } /** @@ -114,8 +88,18 @@ 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'; + $path = $this->path.'/'.$this->prefix.$pathInfo.'.jpeg'; //Without existing path if (!is_dir($dir = dirname($path))) { @@ -138,8 +122,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('rapsyspack_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 @@ -147,7 +130,7 @@ class FacebookUtil { } //Set cache path - $cache = $this->cache.$pathInfo.'.png'; + $cache = $this->cache.'/'.$this->prefix.$pathInfo.'.png'; //Without cache path if (!is_dir($dir = dirname($cache))) { @@ -164,12 +147,6 @@ class FacebookUtil { } } - //Without source - if ($source === null) { - //Set source - $source = realpath($this->source); - } - //Create image object $image = new \Imagick(); @@ -190,7 +167,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 +214,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 +223,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 +260,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 +307,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 +348,7 @@ class FacebookUtil { //Return image data return [ - 'og:image' => $this->package->getAbsoluteUrl($this->url.'/'.stat($path)['mtime'].$pathInfo.'.jpeg'), + 'og:image' => $this->router->generate('rapsyspack_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