Return empty array without source image
Throw file do not exists exception when source file is missing
* Helps manage facebook images
*/
class FacebookUtil {
* Helps manage facebook images
*/
class FacebookUtil {
+ /**
+ * The align
+ *
+ * @var string
+ */
+ protected string $align;
+
/**
* The cache directory
*
* @var string
*/
/**
* The cache directory
*
* @var string
*/
+ protected string $cache;
+
+ /**
+ * The fill
+ *
+ * @var string
+ */
+ protected string $fill;
+
+ /**
+ * The font
+ *
+ * @var string
+ */
+ protected string $font;
/**
* The fonts array
*
* @var array
*/
/**
* The fonts array
*
* @var array
*/
+ protected array $fonts;
/**
* The public path
*
* @var string
*/
/**
* The public path
*
* @var string
*/
+ protected string $path;
/**
* The prefix
*
* @var string
*/
/**
* The prefix
*
* @var string
*/
+ protected string $prefix;
/**
* The RouterInterface instance
*/
protected RouterInterface $router;
/**
* The RouterInterface instance
*/
protected RouterInterface $router;
+ /**
+ * The size
+ *
+ * @var int
+ */
+ protected int $size;
+
+ * @var ?string
+ */
+ protected ?string $source;
+
+ /**
+ * The stroke
+ *
+ protected string $stroke;
+
+ /**
+ * The width
+ *
+ * @var int
+ */
+ protected int $width;
/**
* Creates a new facebook util
/**
* Creates a new facebook util
* @param string $cache The cache directory
* @param string $path The public path
* @param string $prefix The prefix
* @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 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 fonts
$this->fonts = $fonts;
//Set path
$this->path = $path.'/'.$prefix;
+ //Set prefix key
+ $this->prefix = $prefix;
+
//Set router
$this->router = $router;
//Set router
$this->router = $router;
- //Set prefix key
- $this->prefix = $prefix;
+ //Set size
+ $this->size = $size;
//Set source
$this->source = $source;
//Set source
$this->source = $source;
+
+ //Set stroke
+ $this->stroke = $stroke;
+
+ //Set width
+ $this->width = $width;
* @return array The image array
*/
public function getImage(string $pathInfo, array $texts, int $updated, ?string $source = null, int $width = 1200, int $height = 630): array {
* @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';
//Set path file
$path = $this->path.$pathInfo.'.jpeg';
- //Without source
- if ($source === null) {
- //Set source
- $source = realpath($this->source);
- }
-
//Create image object
$image = new \Imagick();
//Create image object
$image = new \Imagick();
+ //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);
+
+ //XXX: Imagick::readImage only supports absolute path
$image->readImage($source);
//Crop using aspect ratio
$image->readImage($source);
//Crop using aspect ratio
'right' => \Imagick::ALIGN_RIGHT
];
'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';
-
//Draw each text stroke
foreach($texts as $text => $data) {
//Set font
//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]);
- $draw->setFontSize($data['size']??$defaultSize);
+ $draw->setFontSize($data['size']??$this->size);
- $draw->setStrokeWidth($data['width']??$defaultWidth);
+ $draw->setStrokeWidth($data['width']??$this->width);
- $draw->setTextAlignment($align = ($aligns[$data['align']??$defaultAlign]));
+ $draw->setTextAlignment($align = ($aligns[$data['align']??$this->align]));
//Get font metrics
$metrics = $image->queryFontMetrics($draw, $text);
//Get font metrics
$metrics = $image->queryFontMetrics($draw, $text);
$texts[$text]['y'] = $data['y'] += $metrics['ascender'] - $metrics['textHeight']/2;
//Set stroke color
$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));
- $draw->setFillColor(new \ImagickPixel($data['stroke']??$defaultStroke));
+ $draw->setFillColor(new \ImagickPixel($data['stroke']??$this->stroke));
//Add annotation
$draw->annotation($data['x'], $data['y'], $text);
//Add annotation
$draw->annotation($data['x'], $data['y'], $text);
//Draw each text
foreach($texts as $text => $data) {
//Set font
//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]);
- $draw->setFontSize($data['size']??$defaultSize);
+ $draw->setFontSize($data['size']??$this->size);
- $draw->setTextAlignment($aligns[$data['align']??$defaultAlign]);
+ $draw->setTextAlignment($aligns[$data['align']??$this->align]);
- $draw->setFillColor(new \ImagickPixel($data['fill']??$defaultFill));
+ $draw->setFillColor(new \ImagickPixel($data['fill']??$this->fill));
//Add annotation
$draw->annotation($data['x'], $data['y'], $text);
//Add annotation
$draw->annotation($data['x'], $data['y'], $text);