function blackBox(&$canvas, $o) { $rectangle = new Imagick(); $rectangle->newPseudoImage($o['w'], $o['h'], "xc:none"); $draw1 = new ImagickDraw(); $draw1->pushPattern('gradient', 0, 0, 5, 5); $tile = new Imagick(); $tile->readImage(realpath("assets/diag_tile.png")); $draw1->composite(Imagick::COMPOSITE_OVER, 0, 0, 5, 5, $tile); $draw1->popPattern(); $draw1->setFillPatternURL('#gradient'); $draw1->rectangle(0, 0, $o['w'], $o['h']); $rectangle->drawImage($draw1); $gradient = new Imagick(); $gradient->newPseudoImage($o['w'], $o['h'], "gradient:#DDD-#666"); $rectangle->compositeImage($gradient, Imagick::COMPOSITE_COPYOPACITY, 0, 0); $black = new Imagick(); $black->newPseudoImage($o['w'], $o['h'], "xc:black"); $layered = new Imagick(); $layered->newPseudoImage($o['w'] + 20, $o['h'] + 20, "xc:none"); $layered->compositeImage($black, Imagick::COMPOSITE_OVER, 5, 0); $layered->compositeImage($black, Imagick::COMPOSITE_OVER, 5, 5); $layered->compositeImage($gradient, Imagick::COMPOSITE_COPYOPACITY, 5, 5); $layered->blurImage(4, 5, imagick::CHANNEL_ALPHA); $layered->compositeImage($black, Imagick::COMPOSITE_DSTOUT, 0, 0); $canvas->compositeImage($layered, Imagick::COMPOSITE_OVER, $o['x'], $o['y']); $canvas->compositeImage($rectangle, Imagick::COMPOSITE_OVER, $o['x'], $o['y']); }
function __construct($chemin) { if (filter_var($chemin, FILTER_VALIDATE_URL)) { //URL $headers = @get_headers($chemin); if (strpos($headers[0], '404') != false) { //NOT FOUND //throw new \Exception("Not Found Image"); $this->image = new \Imagick(); $this->image->newImage(600, 600, new \ImagickPixel('white')); /* Création d'un nouvel objet imagick */ $im = new \Imagick(); /* Création d'une nouvelle image. Elle sera utilisée comme masque de remplissage */ $im->newPseudoImage(50, 100, "gradient:gray-black"); /* Création d'un nouvel objet imagickdraw */ $draw = new \ImagickDraw(); /* On commence un nouveau masque nommé "gradient" */ $draw->pushPattern('gradient', 0, 0, 50, 110); /* Ajout du dégradé sur le masque */ $draw->composite(\Imagick::COMPOSITE_OVER, 0, 0, 50, 110, $im); /* Fermeture du masque */ $draw->popPattern(); /* Utilisation du masque nommé "gradient" comme remplissage */ $draw->setFillPatternURL('#gradient'); /* Définition de la taille du texte à 52 */ $draw->setFontSize(92); $draw->setFont(ROOT . DS . 'font/comic.ttf'); /* Ajout d'un texte */ $draw->annotation(20, 100, "Not Found !"); $this->image->drawImage($draw); } } else { if (!file_exists($chemin)) { //throw new \Exception("Not Found Image"); $this->image = new \Imagick(); $this->image->newImage(600, 600, new \ImagickPixel('white')); /* Création d'un nouvel objet imagick */ $im = new \Imagick(); /* Création d'une nouvelle image. Elle sera utilisée comme masque de remplissage */ $im->newPseudoImage(50, 100, "gradient:gray-black"); /* Création d'un nouvel objet imagickdraw */ $draw = new \ImagickDraw(); /* On commence un nouveau masque nommé "gradient" */ $draw->pushPattern('gradient', 0, 0, 50, 110); /* Ajout du dégradé sur le masque */ $draw->composite(\Imagick::COMPOSITE_OVER, 0, 0, 50, 110, $im); /* Fermeture du masque */ $draw->popPattern(); /* Utilisation du masque nommé "gradient" comme remplissage */ $draw->setFillPatternURL('#gradient'); /* Définition de la taille du texte à 52 */ $draw->setFontSize(92); $draw->setFont(ROOT . DS . 'font/comic.ttf'); /* Ajout d'un texte */ $draw->annotation(20, 100, "Not Found !"); $this->image->drawImage($draw); } } $this->image = new \Imagick($chemin); $imageprops = $this->image->getImageGeometry(); $this->width = $imageprops['width']; $this->height = $imageprops['height']; $this->image->setImageFormat("jpeg"); }
function pushPattern($strokeColor, $fillColor, $backgroundColor) { $draw = new \ImagickDraw(); $draw->setStrokeColor($strokeColor); $draw->setFillColor($fillColor); $draw->setStrokeWidth(1); $draw->setStrokeOpacity(1); $draw->setStrokeColor($strokeColor); $draw->setFillColor($fillColor); $draw->setStrokeWidth(1); $draw->pushPattern("MyFirstPattern", 0, 0, 50, 50); for ($x = 0; $x < 50; $x += 10) { for ($y = 0; $y < 50; $y += 5) { $positionX = $x + $y / 5 % 5; $draw->rectangle($positionX, $y, $positionX + 5, $y + 5); } } $draw->popPattern(); $draw->setFillOpacity(0); $draw->rectangle(100, 100, 400, 400); $draw->setFillOpacity(1); $draw->setFillOpacity(1); $draw->push(); $draw->setFillPatternURL('#MyFirstPattern'); $draw->setFillColor('yellow'); $draw->rectangle(100, 100, 400, 400); $draw->pop(); $imagick = new \Imagick(); $imagick->newImage(500, 500, $backgroundColor); $imagick->setImageFormat("png"); $imagick->drawImage($draw); header("Content-Type: image/png"); echo $imagick->getImageBlob(); }