示例#1
1
 private function renderDistanceEuclidian()
 {
     $canvas = new \Imagick();
     $canvas->newPseudoImage(500, 300, "canvas:none");
     $canvas->setImageFormat('png');
     $shadow = clone $canvas;
     $text = clone $canvas;
     $this->drawText($text);
     $this->drawText($shadow, true);
     if (false) {
         $highlight = $this->getSilhouette($text);
         $kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_EUCLIDEAN, "1");
         $highlight->morphology(\Imagick::MORPHOLOGY_DISTANCE, 1, $kernel);
         $highlight->autoLevelImage();
         $highlight->evaluateimage(\Imagick::EVALUATE_MULTIPLY, 0.6);
         $highlight->evaluateimage(\Imagick::EVALUATE_ADD, 0.2 * \Imagick::getQuantum());
         $highlight->levelImage(0.2, 1.4, 0.6);
         $text->compositeimage($highlight, \Imagick::COMPOSITE_MODULATE, 0, 0);
     }
     if (true) {
         $edge = $this->getSilhouette($text);
         $kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGON, "2");
         $edge->morphology(\Imagick::MORPHOLOGY_EDGE_IN, 1, $kernel);
         $edge->compositeImage($text, \Imagick::COMPOSITE_ATOP, 0, 0);
     }
     $canvas->compositeImage($shadow, \Imagick::COMPOSITE_COPY, 0, 0);
     $canvas->compositeImage($text, \Imagick::COMPOSITE_ATOP, 0, 0);
     header("Content-Type: image/png");
     echo $canvas->getImageBlob();
 }
示例#2
1
 /**
  *
  * @param mixed color
  * @param float opacity
  */
 public function fx($color = 'black', $opacity = 0.3)
 {
     $this->im->setImageFormat('png');
     $reflection = $this->im->clone();
     $reflection->flipImage();
     $gradient = new Imagick();
     $gradient->newPseudoImage($reflection->getImageWidth(), $reflection->getImageHeight(), "gradient:transparent-{$color}");
     $reflection->compositeImage($gradient, imagick::COMPOSITE_OVER, 0, 0);
     $reflection->setImageOpacity($opacity);
     $canvas = new Imagick();
     $canvas->newImage($this->im->getImageWidth(), $this->im->getImageHeight() * 2, $color, "png");
     $canvas->compositeImage($this->im, imagick::COMPOSITE_OVER, 0, 0);
     $canvas->compositeImage($reflection, imagick::COMPOSITE_OVER, 0, $this->im->getImageHeight());
     return $canvas;
 }
function gradientRight($width, $height)
{
    $imagick = new Imagick();
    $imagick->newPseudoImage($width, $height, 'gradient:white-black');
    $imagick->rotateImage('none', 90);
    return $imagick;
}
示例#4
0
 public function renderImage3()
 {
     $gradient = new \Imagick();
     $gradient->newPseudoImage(1, 256, "gradient:white-black");
     $newImage = $gradient->fxImage("floor(u*10+0.5)/10");
     $newImage->setimageformat('jpg');
     header("Content-Type: image/jpg");
     echo $newImage;
 }
示例#5
0
 public function example4()
 {
     $graphWidth = 256;
     $imagick = new \Imagick();
     $imagick->newPseudoImage($graphWidth, 1, 'gradient:black-white');
     $arguments = array(9, -90);
     $imagick->functionImage(\Imagick::FUNCTION_SINUSOID, $arguments);
     $fx = "(1.0/(1.0+exp(10.0*(0.5-u)))-0.006693)*1.0092503";
     $fxImage = $imagick->fxImage($fx);
     fxAnalyzeImage($fxImage);
 }
示例#6
0
 public function render()
 {
     //Example ImagickPixel::getColorCount
     $imagick = new \Imagick();
     $imagick->newPseudoImage(640, 480, "magick:logo");
     $histogramElements = $imagick->getImageHistogram();
     $lastColor = array_pop($histogramElements);
     $color = $lastColor->getColor();
     $output = sprintf("ColorCount last pixel = %d\nColor is R %d G %d B %d", $lastColor->getColorCount(), $color['r'], $color['g'], $color['b']);
     return nl2br($output);
     //Example end
 }
示例#7
0
 public function draw(OsuSignature $signature)
 {
     if (empty($this->hexColour)) {
         $this->hexColour = $signature->getHexColour();
     }
     $composite = new Imagick();
     $composite->newPseudoImage($this->getWidth(), $this->getHeight(), "canvas:transparent");
     // Background
     $draw = new ImagickDraw();
     $draw->setFillColor(new ImagickPixel("#555555"));
     $draw->rectangle(0, 0, $this->getWidth(), $this->getHeight());
     $composite->drawImage($draw);
     // Main bar
     $level = $signature->getUser()['level'];
     $xp = $level - floor($level);
     $draw = new ImagickDraw();
     $draw->setFillColor(new ImagickPixel($this->hexColour));
     $draw->rectangle(0, 0, $this->getWidth() * $xp, $this->getHeight());
     $composite->drawImage($draw);
     // Bar end glow
     $draw = new ImagickDraw();
     $draw->setFillColor(new ImagickPixel('#ffffff'));
     $draw->setFillOpacity(0.35);
     $draw->rectangle($this->getWidth() * $xp - $this->getHeight(), 0, $this->getWidth() * $xp, $this->getHeight());
     $composite->drawImage($draw);
     // Text draw & metrics
     $textDraw = new ImagickDraw();
     $textDraw->setFillColor(new ImagickPixel('#555555'));
     $textDraw->setFontSize(12);
     $textDraw->setFont(ComponentLabel::FONT_DIRECTORY . ComponentLabel::FONT_REGULAR);
     $textDraw->setGravity(Imagick::GRAVITY_NORTHWEST);
     $metrics = $composite->queryFontMetrics($textDraw, 'lv' . floor($level));
     // Text white bg
     $draw = new ImagickDraw();
     $draw->setFillColor(new ImagickPixel('#ffffff'));
     $draw->rectangle(($this->getWidth() - $metrics['textWidth']) / 2 - 2, 0, ($this->getWidth() + $metrics['textWidth']) / 2 + 1, $this->getHeight());
     $composite->drawImage($draw);
     // Rounding
     $roundMask = new Imagick();
     $roundMask->newPseudoImage($this->getWidth(), $this->getHeight(), "canvas:transparent");
     $draw = new ImagickDraw();
     $draw->setFillColor(new ImagickPixel("black"));
     $draw->roundRectangle(0, 0, $this->getWidth() - 1, $this->getHeight() - 1, $this->rounding, $this->rounding);
     $roundMask->drawImage($draw);
     $roundMask->setImageFormat('png');
     $composite->compositeImage($roundMask, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA);
     $signature->getCanvas()->compositeImage($composite, Imagick::COMPOSITE_DEFAULT, $this->x, $this->y);
     // Level text
     $signature->getCanvas()->annotateImage($textDraw, $this->x + ($this->getWidth() - $metrics['textWidth']) / 2, $this->y + ($this->getHeight() - $metrics['textHeight']) / 2 - 2, 0, 'lv' . floor($level));
 }
 function renderCustomImage()
 {
     $size = 400;
     $imagick1 = new \Imagick();
     //$imagick1->newPseudoImage($size, $size, 'gradient:black-white');
     $imagick1->setColorspace(\Imagick::COLORSPACE_GRAY);
     //$imagick1->setColorspace(\Imagick::COLORSPACE_RGB);
     //$imagick1->setColorspace(\Imagick::COLORSPACE_SRGB);
     $imagick1->setColorspace(\Imagick::COLORSPACE_CMYK);
     $imagick1->newPseudoImage($size, $size, 'gradient:gray(100%)-gray(0%)');
     $imagick1->setFormat('png');
     //analyzeImage($imagick1);
     header("Content-Type: image/png");
     echo $imagick1->getImageBlob();
 }
 public function renderCustomImage()
 {
     $size = 200;
     $imagick1 = new \Imagick();
     $imagick1->newPseudoImage($size, $size, 'gradient:black-white');
     $arguments = array(9, -90);
     $imagick1->functionImage(\Imagick::FUNCTION_SINUSOID, $arguments);
     $imagick2 = new \Imagick();
     $imagick2->newPseudoImage($size, $size, 'gradient:black-white');
     $arguments = array(0.5, 0);
     $imagick2->functionImage(\Imagick::FUNCTION_SINUSOID, $arguments);
     $imagick1->compositeimage($imagick2, \Imagick::COMPOSITE_MULTIPLY, 0, 0);
     $imagick1->setimageformat('png');
     header("Content-Type: image/png");
     echo $imagick1->getImageBlob();
 }
示例#10
0
function gameSummary(&$canvas, $o)
{
    $maxHeight = 910;
    $width = 980;
    $height = $maxHeight;
    $plays = new Imagick();
    $plays->newPseudoImage($width, $height, 'xc:none');
    $teams = array();
    $teams['V'] = fetchTeam($o['vTeam']);
    $teams['H'] = fetchTeam($o['hTeam']);
    $bodyHeight = 200;
    $path = "http://www.sidearmstats.com/rpi/mhockey/1.xml";
    $path = "sidearm.xml";
    $path = $o['liveStatsXML'];
    $scores = getGameSummaryInfo($path);
    $vOffset = 0;
    $lastPeriod = 0;
    $playIndex = 0;
    foreach ($scores->score as $score) {
        $playIndex++;
        if ($vOffset + 150 > $maxHeight && $o["numPlays"] == "auto") {
            break;
        } else {
            if ($o["numPlays"] != "auto" && $o["numPlays"] + $o["startIndex"] < $playIndex) {
                break;
            }
        }
        if ($o["startIndex"] + 1 > $playIndex) {
            continue;
        }
        if ($vOffset > 0) {
            $plays->compositeImage(fillRectangle(960, 2, '#FFF'), imagick::COMPOSITE_OVER, 0, $vOffset);
        }
        if ($score['prd'] + 0 != $lastPeriod) {
            $lastPeriod = $score['prd'] + 0;
            $plays->compositeImage(periodLabel($lastPeriod), imagick::COMPOSITE_OVER, 0, $vOffset);
            $vOffset += 50;
            $plays->compositeImage(fillRectangle(960, 2, '#FFF'), imagick::COMPOSITE_OVER, 0, $vOffset);
        }
        $plays->compositeImage(scoringPlay($score, $teams), imagick::COMPOSITE_OVER, 0, $vOffset);
        $vOffset += 100;
        //print_r($score);
    }
    addGeoToCanvas($canvas, array('type' => 'flexBox', 'w' => 1920, 'h' => 1080, 'x' => 0, 'y' => 0, 'bodyText' => '', 'boxHeight' => $vOffset, 'boxWidth' => 1000, 'boxOffset' => 'auto', 'boxPadding' => 10, 'titleColor' => $o['barColor'], 'titleHeight' => '70', 'titleText' => $o['titleText'], 'titleGravity' => 'center', 'logoHeight' => 100, 'logoLeft' => $teams['H']['logo'], 'logoRight' => $teams['V']['logo']));
    $canvas->compositeImage($plays, imagick::COMPOSITE_OVER, (1920 - 980) / 2, 1080 - 50 - $vOffset - 10);
}
示例#11
0
function a0nCRQ($msg, $padx, $pady, $bc, $fc, $tc)
{
    $im = new Imagick();
    $idraw = new ImagickDraw();
    $idraw->setFontSize(30);
    $idraw->setFont('MyriadPro-Regular.otf');
    $idraw->setGravity(Imagick::GRAVITY_CENTER);
    $metrics = $im->queryFontMetrics($idraw, $msg);
    $im->newPseudoImage($metrics["textWidth"] + $padx * 2, $metrics["textHeight"] + $pady * 2, "xc:none");
    $idraw->setFillColor($fc);
    $idraw->setStrokeColor($bc);
    $idraw->roundrectangle(0, 0, $metrics["textWidth"] + $padx * 2 - 1, $metrics["textHeight"] + $pady * 2 - 1, 10, 10);
    $idraw->setFillColor($tc);
    $idraw->setStrokeColor($tc);
    $idraw->annotation(0, 0, $msg);
    $im->drawImage($idraw);
    return $im;
}
示例#12
0
function renderFontEffect()
{
    $canvas = new \Imagick();
    $canvas->newPseudoImage(500, 300, "canvas:none");
    $canvas->setImageFormat('png');
    $shadow = clone $canvas;
    $text = clone $canvas;
    drawText($text);
    drawText($shadow, true);
    $edge = getSilhouette($text);
    $kernel = \ImagickKernel::fromBuiltIn(\Imagick::KERNEL_OCTAGON, "2");
    $edge->morphology(\Imagick::MORPHOLOGY_EDGE_IN, 1, $kernel);
    $edge->compositeImage($text, \Imagick::COMPOSITE_ATOP, 0, 0);
    $canvas->compositeImage($shadow, \Imagick::COMPOSITE_COPY, 0, 0);
    $canvas->compositeImage($text, \Imagick::COMPOSITE_ATOP, 0, 0);
    header("Content-Type: image/png");
    echo $canvas->getImageBlob();
}
示例#13
0
文件: Cli.php 项目: cargomedia/cm
 public function generateFavicon()
 {
     $faviconConfigList = $this->_getFaviconConfigList();
     $this->_getStreamOutput()->writeln('Generating favicons');
     $themeDirStructList = Functional\map(CM_Site_Abstract::getAll(), function (CM_Site_Abstract $site) {
         $render = new CM_Frontend_Render(new CM_Frontend_Environment($site));
         return ['render' => $render, 'themeDir' => new CM_File($render->getThemeDir(true))];
     });
     $themeDirStructList = Functional\unique($themeDirStructList, function (array $themeDirStruct) {
         /** @var CM_File $themeDir */
         $themeDir = $themeDirStruct['themeDir'];
         return $themeDir->getPath();
     });
     //filter site aliases
     foreach ($themeDirStructList as $themeDirStruct) {
         /** @var CM_Frontend_Render $render */
         $render = $themeDirStruct['render'];
         /** @var CM_File $themeDir */
         $themeDir = $themeDirStruct['themeDir'];
         $svgFile = $themeDir->joinPath('resource', 'img', self::FAVICON_SVG_FILENAME);
         if ($svgFile->exists()) {
             foreach ($faviconConfigList as $outputFilename => $config) {
                 $backgroundWidth = (int) $config['width'];
                 $backgroundHeight = (int) $config['height'];
                 $backgroundColor = false === $config['transparent'] ? $render->getLessVariable(self::FAVICON_BACKGROUND_LESS_VARIABLE) : 'transparent';
                 $background = new Imagick();
                 $background->newPseudoImage($backgroundWidth, $backgroundHeight, 'canvas:' . $backgroundColor);
                 $backgroundImage = new CM_Image_Image($background);
                 $iconSize = (int) (min($backgroundWidth, $backgroundHeight) * (double) $config['iconSize']);
                 $iconImage = CM_Image_Image::createFromSVGWithSize($svgFile->read(), $iconSize, $iconSize);
                 $backgroundImage->compositeImage($iconImage, ($backgroundWidth - $iconSize) / 2, ($backgroundHeight - $iconSize) / 2);
                 $backgroundImage->setFormat(CM_Image_Image::FORMAT_PNG);
                 $targetFile = $themeDir->joinPath('resource', 'img', 'meta', $outputFilename);
                 $targetFile->ensureParentDirectory();
                 $targetFile->write($backgroundImage->getBlob());
                 $this->_getStreamOutput()->writeln('Generated ' . $targetFile->getPath());
             }
         }
     }
 }
示例#14
0
<?php

$im = new Imagick();
$im->newPseudoImage(100, 100, "XC:red");
$im->setImageFormat("png");
echo $im->width . "x" . $im->height . "\n";
echo $im->format;
示例#15
0
<?php

$im = new Imagick();
$im->newPseudoImage(100, 100, "XC:red");
var_dump($im->getImageGeometry());
$im->newPseudoImage(0, 0, "magick:logo");
var_dump($im->getImageGeometry());
$im->readImage("magick:logo");
var_dump($im->getImageGeometry());
$im->newPseudoImage(0, 0, "rose:");
var_dump($im->getImageGeometry());
try {
    $im->newPseudoImage(0, 0, "png:");
    var_dump($im->getImageGeometry());
} catch (Exception $e) {
    echo "fail\n";
}
示例#16
0
function renderKernel(ImagickKernel $imagickKernel)
{
    $matrix = $imagickKernel->getMatrix();
    $imageMargin = 20;
    $tileSize = 20;
    $tileSpace = 4;
    $shadowSigma = 4;
    $shadowDropX = 20;
    $shadowDropY = 0;
    $radius = $tileSize / 2 * 0.9;
    $rows = count($matrix);
    $columns = count($matrix[0]);
    $imagickDraw = new \ImagickDraw();
    $imagickDraw->setFillColor('#afafaf');
    $imagickDraw->setStrokeColor('none');
    $imagickDraw->translate($imageMargin, $imageMargin);
    $imagickDraw->push();
    ksort($matrix);
    foreach ($matrix as $row) {
        ksort($row);
        $imagickDraw->push();
        foreach ($row as $cell) {
            if ($cell !== false) {
                $color = intval(255 * $cell);
                $colorString = sprintf("rgb(%f, %f, %f)", $color, $color, $color);
                $imagickDraw->setFillColor($colorString);
                $imagickDraw->rectangle(0, 0, $tileSize, $tileSize);
            }
            $imagickDraw->translate($tileSize + $tileSpace, 0);
        }
        $imagickDraw->pop();
        $imagickDraw->translate(0, $tileSize + $tileSpace);
    }
    $imagickDraw->pop();
    $width = $columns * $tileSize + ($columns - 1) * $tileSpace;
    $height = $rows * $tileSize + ($rows - 1) * $tileSpace;
    $imagickDraw->push();
    $imagickDraw->translate($width / 2, $height / 2);
    $imagickDraw->setFillColor('rgba(0, 0, 0, 0)');
    $imagickDraw->setStrokeColor('white');
    $imagickDraw->circle(0, 0, $radius - 1, 0);
    $imagickDraw->setStrokeColor('black');
    $imagickDraw->circle(0, 0, $radius, 0);
    $imagickDraw->pop();
    $canvasWidth = $width + 2 * $imageMargin;
    $canvasHeight = $height + 2 * $imageMargin;
    $kernel = new \Imagick();
    $kernel->newPseudoImage($canvasWidth, $canvasHeight, 'canvas:none');
    $kernel->setImageFormat('png');
    $kernel->drawImage($imagickDraw);
    /* create drop shadow on it's own layer */
    $canvas = $kernel->clone();
    $canvas->setImageBackgroundColor(new \ImagickPixel('rgb(0, 0, 0)'));
    $canvas->shadowImage(100, $shadowSigma, $shadowDropX, $shadowDropY);
    $canvas->setImagePage($canvasWidth, $canvasHeight, -5, -5);
    $canvas->cropImage($canvasWidth, $canvasHeight, 0, 0);
    /* composite original text_layer onto shadow_layer */
    $canvas->compositeImage($kernel, \Imagick::COMPOSITE_OVER, 0, 0);
    $canvas->setImageFormat('png');
    return $canvas;
}
示例#17
0
 public function draw(OsuSignature $signature)
 {
     parent::draw($signature);
     $avatar = $this->getAvatar($signature->getUser());
     if ($avatar) {
         $fitByWidth = $this->getWidth() / $avatar->getImageWidth() < $this->getHeight() / $avatar->getImageHeight() ? true : false;
         if ($fitByWidth) {
             $avatar->thumbnailImage($this->getWidth(), 0, false);
         } else {
             $avatar->thumbnailImage(0, $this->getHeight(), false);
         }
         $avatarXOffset = ($this->getWidth() - $avatar->getImageWidth()) / 2;
         $avatarYOffset = ($this->getHeight() - $avatar->getImageHeight()) / 2;
         /*$avatar->resizeImage(
         			$this->getWidth(),
         			$this->get Height(),
         			1
         			Imagick::FILTER_CATROM
         		);*/
         $avatarRounding = isset($_GET['avatarrounding']) ? max((int) $_GET['avatarrounding'], 0) : $this->rounding;
         $avatar->setImageAlphaChannel(Imagick::ALPHACHANNEL_SET);
         $roundImage = new Imagick();
         $roundImage->newPseudoImage($this->getWidth(), $this->getHeight(), 'canvas:transparent');
         $roundMask = new ImagickDraw();
         $roundMask->setFillColor(new ImagickPixel('black'));
         $roundMask->roundRectangle(0, 0, $avatar->getImageWidth() - 1, $avatar->getImageHeight() - 1, $avatarRounding, $avatarRounding);
         $roundImage->drawImage($roundMask);
         $roundImage->setImageFormat('png');
         $avatar->compositeImage($roundImage, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA);
         $signature->getCanvas()->compositeImage($avatar, Imagick::COMPOSITE_DEFAULT, $this->x + $avatarXOffset, $this->y + $avatarYOffset);
     }
 }
 function renderImagePolynomial()
 {
     //TODO - this doesn't appear to work correctly.
     //        First two coefficents are used to hole global polynomal information
     //           c0 = Order of the polynimial being created
     //           c1 = number_of_terms in one polynomial equation
     //
     //         Rest of the coefficients map to the equations....
     //            v = c0 + c1*x + c2*y + c3*x*y + c4*x^2 + c5*y^2 + c6*x^3 + ...
     //         for each 'value' (number_values of them) given.
     //         As such total coefficients =  2 + number_terms * number_values
     //
     //         Input Arguments are sets of control points...
     //         For Distort Images    order  [u,v, x,y] ...
     //         For Sparse Gradients  order  [x,y, r,g,b] ...
     //c0 + c1*x + c2*y + c3*x*y
     $points = [1, 1, 0, 0, 0.25, 0, -1, 1, 0, 250, 0, 0.25, -1, 5, 100, 500, 0, 0, -1, 5];
     //        $points = [
     //            1,
     //            2, 1, 2,
     //            1, 1, 2,
     ////            3,
     ////            4, 5, 1, 2,
     ////            3, 4, 5, 2,
     ////            1, 3, 4, 5,
     //        ];
     //
     //
     $imagick = new \Imagick();
     //$imagick->newImage(500, 500, "white");
     $imagick->newPseudoImage(500, 500, 'gradient:black-white');
     $imagick->setImageFormat("png");
     $imagick->sparseColorImage(\Imagick::SPARSECOLORMETHOD_POLYNOMIAL, $points);
     header("Content-Type: image/png");
     echo $imagick->getImageBlob();
 }
示例#19
0
require_once 'Imagick.php';
die;
/* Read the image */
$im = new Imagick("sample.jpg");
/* Thumbnail the image */
$im->thumbnailImage(200, null);
/* Create a border for the image */
$im->borderImage(new ImagickPixel("white"), 5, 5);
/* Clone the image and flip it */
$reflection = $im->clone();
$reflection->flipImage();
/* Create gradient. It will be overlayed on the reflection */
$gradient = new Imagick();
/* Gradient needs to be large enough for the image and the borders */
$gradient->newPseudoImage($reflection->getImageWidth() + 10, $reflection->getImageHeight() + 10, "gradient:transparent-black");
/* Composite the gradient on the reflection */
$reflection->compositeImage($gradient, imagick::COMPOSITE_OVER, 0, 0);
/* Add some opacity. Requires ImageMagick 6.2.9 or later */
$reflection->setImageOpacity(0.3);
/* Create an empty canvas */
$canvas = new Imagick();
/* Canvas needs to be large enough to hold the both images */
$width = $im->getImageWidth() + 40;
$height = $im->getImageHeight() * 2 + 30;
$canvas->newImage($width, $height, new ImagickPixel("black"));
$canvas->setImageFormat("png");
/* Composite the original image and the reflection on the canvas */
$canvas->compositeImage($im, imagick::COMPOSITE_OVER, 20, 10);
$canvas->compositeImage($reflection, imagick::COMPOSITE_OVER, 20, $im->getImageHeight() + 10);
/* Output the image*/
示例#20
0
 /**
  * Reflection.
  * @param integer $height
  * @param integer $opacity
  * @param boolean $fade_in
  */
 protected function _reflection($height, $opacity, $fade_in)
 {
     $reflection = $this->im->clone();
     $reflection->flipImage();
     $reflection->cropImage($this->width, $height, 0, 0);
     $reflection->setImagePage($this->width, $height, 0, 0);
     $direction = array('transparent', 'black');
     if ($fade_in) {
         $direction = array_reverse($direction);
     }
     $fade = new \Imagick();
     $fade->newPseudoImage($reflection->getImageWidth(), $reflection->getImageHeight(), vsprintf('gradient:%s-%s', $direction));
     $reflection->compositeImage($fade, \Imagick::COMPOSITE_DSTOUT, 0, 0);
     $reflection->evaluateImage(\Imagick::EVALUATE_MULTIPLY, $opacity / 100, \Imagick::CHANNEL_ALPHA);
     $image = new \Imagick();
     $image->newImage($this->width, $this->height + $height, new \ImagickPixel());
     $image->setImageAlphaChannel(\Imagick::ALPHACHANNEL_SET);
     $image->setColorspace($this->im->getColorspace());
     if ($image->compositeImage($this->im, \Imagick::COMPOSITE_SRC, 0, 0) && $image->compositeImage($reflection, \Imagick::COMPOSITE_OVER, 0, $this->height)) {
         $this->im = $image;
         $this->width = $this->im->getImageWidth();
         $this->height = $this->im->getImageHeight();
     }
 }
示例#21
0
 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");
 }
示例#22
0
 function showImage(\Imagick $imagick1)
 {
     $backGround = new \Imagick();
     $backGround->newPseudoImage($imagick1->getImageWidth(), $imagick1->getImageHeight(), 'pattern:checkerboard');
     $backGround->compositeimage($imagick1, \Imagick::COMPOSITE_ATOP, 0, 0);
     $backGround->setImageFormat('png');
     header("Content-Type: image/png");
     echo $backGround->getImageBlob();
 }
示例#23
0
 /**
  * Create a vignette
  *
  * Heavily inspired by Dejan Marjanovics article http://code.tutsplus.com/tutorials/create-instagram-filters-with-php--net-24504
  *
  * @param $imagickInstance
  * @param string $color1
  * @param string $color2
  * @param float $crop_factor
  */
 private function _vignette($imagickInstance, $color1 = 'none', $color2 = 'black', $crop_factor = 1.5)
 {
     $vignetteWidth = floor($imagickInstance->getImageWidth() * $crop_factor);
     $vignetteHeight = floor($imagickInstance->getImageHeight() * $crop_factor);
     $radial = new \Imagick();
     $radial->newPseudoImage($vignetteWidth, $vignetteHeight, "radial-gradient:{$color1}-{$color2}");
     $radial->setImageFormat('png32');
     $imagickInstance->compositeImage($radial, \imagick::COMPOSITE_MULTIPLY, -($vignetteWidth - $imagickInstance->getImageWidth()) / 2, -($vignetteHeight - $imagickInstance->getImageHeight()) / 2);
 }
示例#24
0
 public function addTextBox($text, $x1, $y1, $x2, $y2)
 {
     $textbox = new \Imagick();
     $textbox->setFont(self::$config['font']);
     $textbox->setBackgroundColor('transparent');
     $textbox->setGravity(imagick::GRAVITY_CENTER);
     // 'label' sticks the string on one line, whereas 'caption' will make a paragraph.
     // Unfortunately, will happily split two words onto two lines which looks a bit silly
     // if ($text has two words) then...
     if (count(explode(" ", trim($text))) == 2) {
         $method = 'label';
     } else {
         $method = 'caption';
     }
     $textbox->newPseudoImage($x2 - $x1, $y2 - $y1, $method . ":" . $text);
     $this->image->compositeImage($textbox, imagick::COMPOSITE_OVER, $x1, $y1);
     return $this;
 }
示例#25
0
 /**
  *
  * @return bool
  */
 public function reflectionEffect()
 {
     $source = $this->_getTempEditorFullPath();
     $im = new Imagick($source[0]);
     /* Thumbnail the image */
     $im->thumbnailImage(200, null);
     /* Create a border for the image */
     $im->borderImage(new ImagickPixel("white"), 1, 1);
     /* Clone the image and flip it */
     $reflection = $im->clone();
     $reflection->flipImage();
     /* Create gradient. It will be overlayd on the reflection */
     $gradient = new Imagick();
     /* Gradient needs to be large enough for the image and the borders */
     $gradient->newPseudoImage($reflection->getImageWidth() + 5, round($reflection->getImageHeight() / 2), "gradient:transparent-white");
     /* Composite the gradient on the reflection */
     $reflection->compositeImage($gradient, imagick::COMPOSITE_OVER, 0, 0);
     /* Add some opacity. Requires ImageMagick 6.2.9 or later */
     $reflection->setImageOpacity(0.2);
     /* Create an empty canvas */
     $canvas = new Imagick();
     /* Canvas needs to be large enough to hold the both images */
     $width = $im->getImageWidth() + 40;
     $height = $im->getImageHeight() * 1.5 + 10;
     $canvas->newImage($width, $height, new ImagickPixel("white"));
     $canvas->setImageFormat("png");
     /* Composite the original image and the reflection on the canvas */
     $canvas->compositeImage($im, imagick::COMPOSITE_OVER, 20, 10);
     $canvas->compositeImage($reflection, imagick::COMPOSITE_OVER, 20, $im->getImageHeight() + 10);
     $canvas->writeImage($source[1]);
     $this->getRawEditorCache();
     return true;
 }
示例#26
0
 public function renderImageArcsin()
 {
     //Example Imagick::functionImage ArcSin
     $imagick = new \Imagick();
     $imagick->newPseudoImage(500, 500, 'gradient:black-white');
     $arguments = array($this->control->getFirstTerm());
     $secondTerm = $this->control->getSecondTerm();
     $thirdTerm = $this->control->getThirdTerm();
     $fourthTerm = $this->control->getFourthTerm();
     if (strlen($secondTerm)) {
         $arguments[] = $secondTerm;
         if (strlen($thirdTerm)) {
             $arguments[] = $thirdTerm;
             if (strlen($fourthTerm)) {
                 $arguments[] = $fourthTerm;
             }
         }
     }
     $imagick->functionImage(\Imagick::FUNCTION_ARCSIN, $arguments);
     $imagick->setimageformat('png');
     analyzeImage($imagick, 512, 256);
     //Example end
 }
示例#27
0
 /**
  * Performs optimized gradient fill for non-opaque linear gradients
  *
  * @param Linear $fill
  */
 private function applyFastLinear(Linear $fill)
 {
     $gradient = new \Imagick();
     $size = $this->getSize();
     $color = sprintf('gradient:%s-%s', (string) $fill->getStart(), (string) $fill->getEnd());
     if ($fill instanceof Horizontal) {
         $gradient->newPseudoImage($size->getHeight(), $size->getWidth(), $color);
         $gradient->rotateImage(new \ImagickPixel(), 90);
     } else {
         $gradient->newPseudoImage($size->getWidth(), $size->getHeight(), $color);
     }
     $this->imagick->compositeImage($gradient, \Imagick::COMPOSITE_OVER, 0, 0);
     $gradient->clear();
     $gradient->destroy();
 }
示例#28
0
 /**
  * Adds a vignette to the image
  * @param string $color the colour of the vignette
  * @param int $composition an imagick constant defining the composition to use
  * @param float $crop_factor defines the strenth of the vignette
  * @return Filter
  */
 public function vignette($color, $composition = \Imagick::COMPOSITE_DEFAULT, $crop_factor = 1.5)
 {
     $height = $this->imagick()->getImageHeight();
     $width = $this->imagick()->getImageWidth();
     $crop_x = floor($height * $crop_factor);
     $crop_y = floor($width * $crop_factor);
     $overlay = new \Imagick();
     $overlay->newPseudoImage($crop_x, $crop_y, "radial-gradient:rgba(0,0,0,0)-{$color}");
     $this->imagick()->compositeImage($overlay, $composition, ($width - $crop_x) / 2, ($height - $crop_y) / 2);
     return $this;
 }
示例#29
0
 protected function _do_reflection($height, $opacity, $fade_in)
 {
     // Clone the current image and flip it for reflection
     $reflection = $this->im->clone();
     $reflection->flipImage();
     // Crop the reflection to the selected height
     $reflection->cropImage($this->width, $height, 0, 0);
     $reflection->setImagePage($this->width, $height, 0, 0);
     // Select the fade direction
     $direction = array('transparent', 'black');
     if ($fade_in) {
         // Change the direction of the fade
         $direction = array_reverse($direction);
     }
     // Create a gradient for fading
     $fade = new Imagick();
     $fade->newPseudoImage($reflection->getImageWidth(), $reflection->getImageHeight(), vsprintf('gradient:%s-%s', $direction));
     // Apply the fade alpha channel to the reflection
     $reflection->compositeImage($fade, Imagick::COMPOSITE_DSTOUT, 0, 0);
     // NOTE: Using setImageOpacity will destroy alpha channels!
     $reflection->evaluateImage(Imagick::EVALUATE_MULTIPLY, $opacity / 100, Imagick::CHANNEL_ALPHA);
     // Create a new container to hold the image and reflection
     $image = new Imagick();
     $image->newImage($this->width, $this->height + $height, new ImagickPixel());
     // Force the image to have an alpha channel
     $image->setImageAlphaChannel(Imagick::ALPHACHANNEL_SET);
     // Force the background color to be transparent
     // $image->setImageBackgroundColor(new ImagickPixel('transparent'));
     // Match the colorspace between the two images before compositing
     $image->setColorspace($this->im->getColorspace());
     // Place the image and reflection into the container
     if ($image->compositeImage($this->im, Imagick::COMPOSITE_SRC, 0, 0) and $image->compositeImage($reflection, Imagick::COMPOSITE_OVER, 0, $this->height)) {
         // Replace the current image with the reflected image
         $this->im = $image;
         // Reset the width and height
         $this->width = $this->im->getImageWidth();
         $this->height = $this->im->getImageHeight();
         return TRUE;
     }
     return FALSE;
 }
示例#30
0
 private function getCharacterOutline()
 {
     //Example ImagickKernel::morphology
     $imagick = new \Imagick(realpath("./images/character.png"));
     $character = new \Imagick();
     $character->newPseudoImage($imagick->getImageWidth(), $imagick->getImageHeight(), "canvas:white");
     $canvas = new \Imagick();
     $canvas->newPseudoImage($imagick->getImageWidth(), $imagick->getImageHeight(), "canvas:black");
     $character->compositeimage($imagick, \Imagick::COMPOSITE_COPYOPACITY, 0, 0);
     $canvas->compositeimage($character, \Imagick::COMPOSITE_ATOP, 0, 0);
     $canvas->setFormat('png');
     return $canvas;
     //Example end
 }