public function testImageWorkingType()
 {
     $file100 = Kwf_Media::getOutput('Kwc_ImageResponsive_MediaOutput_Image_TestComponent', 'root_imageabstract1', 'dh-100-ffa94c');
     $image = new Imagick();
     $image->readimageblob($file100['contents']);
     $this->assertEquals(100, $image->getImageWidth());
     $file200 = Kwf_Media::getOutput('Kwc_ImageResponsive_MediaOutput_Image_TestComponent', 'root_imageabstract1', 'dh-200-ffa94c');
     $image->readimageblob($file200['contents']);
     $this->assertEquals(200, $image->getImageWidth());
 }
function compareImage(URLToCheck $urlToCheck, $resposeBody, $contentType)
{
    $imageType = substr($contentType, strlen('image/'));
    $blahblah = str_replace(['?', '&', '/', '='], '_', $urlToCheck->getUrl());
    if (strlen($blahblah) >= 100) {
        $md5 = md5($blahblah);
        $blahblah = substr($blahblah, 0, 100) . $md5;
    }
    $oututFilename = 'compare/' . $blahblah . '.' . $imageType;
    if (file_exists($oututFilename) == false) {
        echo "First compare, creating file of {$blahblah}\n";
        file_put_contents($oututFilename, $resposeBody);
        return;
    }
    $imagickNew = new Imagick();
    $imagickNew->readimageblob($resposeBody);
    $imagickCompare = new Imagick($oututFilename);
    $result = $imagickCompare->compareImages($imagickNew, \Imagick::LAYERMETHOD_COMPAREANY);
    list($imagickDifference, $distance) = $result;
    if ($distance > 0.01) {
        echo "Differrence detected in {$blahblah} \n";
        /** @var $imagickDifference Imagick */
        $imagickDifference->writeimage($blahblah . "diff" . time() . '.' . $imageType);
    }
}
Exemple #3
0
 function convertPdfToImage($pdfData)
 {
     $imageData = new \Imagick();
     $imageData->readimageblob($pdfData);
     $imageData->setImageFormat('png');
     // $imageData->extentImage($this->options['width'],$this->options['height'],0,0);
     $this->phpimage = $imageData;
 }
 public function getBlurred($url)
 {
     $image = new Imagick();
     $imagenblob = file_get_contents($url);
     $image->readimageblob($imagenblob);
     $image->blurImage(5, 3);
     return $image;
 }
 public function takeScreenshot($jqueryIdentifier = "body")
 {
     $image = new \Imagick();
     $image->readimageblob($this->webDriver->takeScreenshot());
     $coords = $this->getCoordinates($jqueryIdentifier);
     $image->cropImage($coords['width'], $coords['height'], $coords['offset_x'], $coords['offset_y']);
     return $image;
 }
 public function getImage($identifier)
 {
     // @todo use curl
     $imageFile = $this->getStorageFile($identifier);
     $imageContent = file_get_contents($imageFile);
     $image = new \Imagick();
     $image->readimageblob($imageContent);
     return $image;
 }
 function __construct($imgsource, $sourcetype = QrReader::SOURCE_TYPE_FILE, $isUseImagickIfAvailable = true)
 {
     try {
         switch ($sourcetype) {
             case QrReader::SOURCE_TYPE_FILE:
                 if ($isUseImagickIfAvailable && extension_loaded('imagick')) {
                     $im = new Imagick();
                     $im->readImage($imgsource);
                 } else {
                     $image = file_get_contents($imgsource);
                     $im = imagecreatefromstring($image);
                 }
                 break;
             case QrReader::SOURCE_TYPE_BLOB:
                 if ($isUseImagickIfAvailable && extension_loaded('imagick')) {
                     $im = new Imagick();
                     $im->readimageblob($imgsource);
                 } else {
                     $im = imagecreatefromstring($imgsource);
                 }
                 break;
             case QrReader::SOURCE_TYPE_RESOURCE:
                 $im = $imgsource;
                 if ($isUseImagickIfAvailable && extension_loaded('imagick')) {
                     $isUseImagickIfAvailable = true;
                 } else {
                     $isUseImagickIfAvailable = false;
                 }
                 break;
         }
         if ($isUseImagickIfAvailable && extension_loaded('imagick')) {
             $width = $im->getImageWidth();
             $height = $im->getImageHeight();
             $source = new \Zxing\IMagickLuminanceSource($im, $width, $height);
         } else {
             $width = imagesx($im);
             $height = imagesy($im);
             $source = new \Zxing\GDLuminanceSource($im, $width, $height);
         }
         $histo = new \Zxing\Common\HybridBinarizer($source);
         $bitmap = new \Zxing\BinaryBitmap($histo);
         $reader = new \Zxing\Qrcode\QRCodeReader();
         $this->result = $reader->decode($bitmap);
     } catch (\Zxing\NotFoundException $er) {
         $this->result = false;
     } catch (\Zxing\FormatException $er) {
         $this->result = false;
     } catch (\Zxing\ChecksumException $er) {
         $this->result = false;
     }
     $im->clear();
 }
 public function testScreenshot()
 {
     if (!class_exists('Imagick')) {
         $this->markTestSkipped('Imagick is not installed');
     }
     $browser = $this->getBrowser();
     $browser->open($this->getUrl('index.php'));
     $data = $browser->screenshot();
     $image = new \Imagick();
     $image->readimageblob($data);
     $this->assertGreaterThan(100, $image->getImageWidth());
     $this->assertGreaterThan(100, $image->getImageHeight());
 }
Exemple #9
0
 protected function parseItems($xpath, $html, &$items)
 {
     $crawler = new Crawler();
     $crawler->addHtmlContent($html);
     foreach ($crawler->filterXPath($xpath) as $tr) {
         $item = array();
         $tds = $tr->getElementsByTagName('td');
         if (0 == $tds->length) {
             continue;
         }
         $item['id'] = (int) ($item['value'] = str_replace(array("\n", "'"), '', $tds->item(1)->nodeValue));
         $name = $tds->item(3);
         $sup = $name->getElementsByTagName('sup')->item(0);
         if (null !== $sup) {
             $name->removeChild($sup);
         }
         $item['name'] = $item['label'] = str_replace(array("\n", "'"), '', $name->nodeValue);
         /** @var \DOMElement $tds */
         if ($tds->item(4)->getElementsByTagName('a')->length > 0) {
             $title = $tds->item(4)->getElementsByTagName('a')->item(0)->getAttribute('title');
         } else {
             continue;
         }
         $item['title'] = $title;
         if ($tds->item(0)->childNodes->length != 0 && $tds->item(0)->childNodes->item(0)->nodeName == 'a' && $tds->item(0)->childNodes->item(0)->childNodes->item(0)->nodeName == 'img') {
             $image = file_get_contents($tds->item(0)->childNodes->item(0)->childNodes->item(0)->getAttribute('src'));
             $storepath = sprintf('/var/www/MControl/images/%s.png', str_replace(':', '_', $item['name']));
             /** @var \Imagick $croppedImage */
             $croppedImage = new \Imagick();
             $croppedImage->readimageblob($image);
             $croppedImage->cropimage(25, 12, 0, 0);
             $croppedImage->writeimage($storepath);
             $palette = $this->colorPalette($storepath, 2);
             $item['color'] = str_split($palette[1], 2);
         } else {
             $item['color'] = null;
         }
         $items[] = $item;
     }
     return $items;
 }
Exemple #10
0
/**
 * Function to scale an image maintaining the aspect ratio.
 *
 * @param   string  $image              The image
 * @param   int     $width              New width
 * @param   int     $height             New height
 * @return  string                      The resized image
 */
function resizeImage($image, $width, $height)
{
    $img = new Imagick();
    $img->readimageblob($image);
    $img->setImageFormat('png');
    $original_width = $img->getImageWidth();
    $original_height = $img->getImageHeight();
    if ($width > 0 && $height == 0) {
        // Use width to scale
        if ($width < $original_width) {
            $new_width = $width;
            $new_height = $original_height / $original_width * $width;
            $new_height > 0 ? $new_height : ($new_height = 1);
            // Must be 1 at least
            $img->resizeImage($new_width, $new_height, Imagick::FILTER_LANCZOS, 1);
            return $img->getImageBlob();
        }
    } else {
        if ($width == 0 && $height > 0) {
            // Use height to scale
            if ($height < $original_height) {
                $new_width = $original_width / $original_height * $height;
                $new_width > 0 ? $new_width : ($new_width = 1);
                // Must be 1 at least
                $new_height = $height;
                $img->resizeImage($new_width, $new_height, Imagick::FILTER_LANCZOS, 1);
                return $img->getImageBlob();
            }
        } else {
            if ($width > 0 && $height > 0) {
                // No need to keep aspect ratio
                $img->resizeImage($width, $height, Imagick::FILTER_LANCZOS, 1);
                return $img->getImageBlob();
            } else {
                // No need to resize, return the original image
                return $image;
            }
        }
    }
}
 public function testWithSmallImageUploadedHtml()
 {
     $html = $this->_root->getComponentById(1802)->render();
     $doc = new DOMDocument();
     $doc->strictErrorChecking = FALSE;
     $doc->loadHTML($html);
     $xml = simplexml_import_dom($doc);
     $img = $xml->xpath("//img");
     $this->assertEquals(1, count($img));
     $this->assertEquals(10, (string) $img[0]['width']);
     $this->assertEquals(10, (string) $img[0]['height']);
     $this->assertTrue(!!preg_match('#^/media/([^/]+)/([^/]+)/([^/]+)#', (string) $img[0]['src'], $m));
     $o = call_user_func(array($m[1], 'getMediaOutput'), $m[2], $m[3], $m[1]);
     $this->assertEquals('image/gif', $o['mimeType']);
     $im = new Imagick();
     if (isset($o['contents'])) {
         $contents = $o['contents'];
     } else {
         $contents = file_get_contents($o['file']);
     }
     $im->readImageBlob($contents);
     $this->assertEquals(10, $im->getImageWidth());
     $this->assertEquals(10, $im->getImageHeight());
     $this->assertEquals(Kwf_Media_Image::scale(Kwf_Model_Abstract::getInstance('Kwc_Basic_ImageEnlarge_UploadsModel')->getRow('2')->getFileSource(), array(10, 10, 'cover' => true), 2), $contents);
     $a = $xml->xpath("//a");
     $this->assertEquals(1, count($a));
     $this->assertEquals('{"width":210,"height":70,"style":"CenterBox","adaptHeight":true,"lightboxUrl":"\\/foo3\\/image"}', (string) $a[0]['data-kwc-lightbox']);
     $this->assertContains('/media/Kwc_Basic_ImageEnlarge_EnlargeTag_TestComponent/1802-linkTag/', (string) $a[0]['href']);
     $html = $this->_root->getComponentById('1802-linkTag_imagePage')->render();
     $doc = new DOMDocument();
     $doc->strictErrorChecking = FALSE;
     $doc->loadHTML($html);
     $xml = simplexml_import_dom($doc);
     $img = $xml->xpath("//img");
     $this->assertEquals(1, count($img));
     $this->assertTrue(!!preg_match('#^/media/([^/]+)/([^/]+)/([^/]+)#', (string) $img[0]['src'], $m));
     $o = call_user_func(array($m[1], 'getMediaOutput'), $m[2], $m[3], $m[1]);
     $this->assertEquals('image/gif', $o['mimeType']);
     $im = new Imagick();
     if (isset($o['contents'])) {
         $contents = $o['contents'];
     } else {
         $contents = file_get_contents($o['file']);
     }
     $im->readImageBlob($contents);
     // crop is set, because show_selection is set and else compare will fail
     $content = Kwf_Media_Image::scale(Kwf_Model_Abstract::getInstance('Kwc_Basic_ImageEnlarge_UploadsModel')->getRow('2')->getFileSource(), array(210, 70, 'cover' => false, 'crop' => array('height' => 70, 'width' => 210, 'x' => 0, 'y' => 0)));
     $image = new Imagick();
     $image->readimageblob($content);
     $this->assertEquals(210, $im->getImageWidth());
     $this->assertEquals(70, $im->getImageHeight());
     $this->assertEquals($content, $contents);
 }
Exemple #12
0
 }
 $start_interval = $current;
 $end_interval = $start_interval + $step;
 $sql = "SELECT img_id, image, timestamp, RG_start FROM SE90_060_WTH_IM_S1_8000_JET_M6_ST3600" . " WHERE timestamp >= " . $start_interval . " AND timestamp < " . $end_interval;
 $stmt = $conn->query($sql);
 $row = $stmt->fetchObject();
 if ($row == false) {
     $im->newImage($width, $height, "transparent");
 } else {
     if (is_null($row->image)) {
         $im->newImage($width, $height, "transparent");
     } else {
         $range_start = $row->RG_start;
         $height_bot = $height / 8000 * $range_start;
         $height_top = $height - $height_bot;
         $image_top->readimageblob($row->image);
         $image_top->resizeImage($width, $height_top, Imagick::FILTER_LANCZOS, 1);
         $image_bot->newImage($width, $height_bot, "transparent");
         $image_bot->setImageFormat('png');
         $image_tmp->addImage($image_top);
         $image_tmp->addImage($image_bot);
         $image_tmp->resetIterator();
         $im = $image_tmp->appendImages(true);
         $im->resizeImage($width, $height, Imagick::FILTER_LANCZOS, 1);
     }
 }
 $tick = new ImagickDraw();
 $tick->setStrokeWidth(10);
 $tick->setStrokeColor($color);
 $tick->setFillColor($color);
 $tick->line(0, 0, 0, 20);
	POST->image[base64 encoded pdf](local out.pdf test)
	GET->format[png jpg eps etc.](png)
	GET->show[](prints image header for browser display if present)
	GET->debug[](prints debug info if present)
	GET->dpi[a number](300)
	</pre>';
}
$image = new Imagick();
$dpi = 300;
if (isset($_GET['dpi'])) {
    $dpi = (double) $_GET['dpi'];
}
$image->setResolution($dpi, $dpi);
if (isset($_POST['image'])) {
    $decoded = base64_decode($_POST['image']);
    $image->readimageblob($decoded);
} else {
    if (isset($pdftopng)) {
        //todo include pdftopng inline rather than utilizing as a webservice//
        $image->readImage($pdftopng);
    } else {
        $myurl = 'out.pdf';
        $image->readImage($myurl);
    }
}
$format = "png";
if (isset($_GET['format'])) {
    $format = (string) $_GET['format'];
}
if (isset($_GET['show'])) {
    header("Content-Type: image/" . $format);
Exemple #14
0
 function GetView()
 {
     global $TMP_PATH;
     $tmp_file = ADEI::GetTmpFile();
     $im = new Imagick();
     $tmp = new Imagick();
     $image = new Imagick();
     $final = new Imagick();
     $with_axes = new Imagick();
     $output = new Imagick();
     $tick = new ImagickDraw();
     $ceiling = new ImagickDraw();
     $color = new ImagickPixel('#666666');
     $background = new ImagickPixel('none');
     // Transparent
     date_default_timezone_set('UTC');
     $servername = "localhost";
     $username = "******";
     $password = "******";
     $dbname = "HDCP10";
     $req = $this->req->CreateGroupRequest();
     $req = $this->req->CreateDataRequest();
     $fstart = $req->GetProp("view_pb_start", 0);
     $width = $req->GetProp("control_width", 800);
     $height = $req->GetProp("control_height", 600);
     $height = $height - 180;
     // 60px for the xaxis (50px)
     $start = 1367366400000000.0;
     // GMT: Wed, 01 May 2013 00:00:00 GMT
     $end = 1367452800000000.0;
     // GMT: Thu, 02 May 2013 00:00:00 GMT
     //$end = 1367539200000000; // GMT: Fri, 03 May 2013 00:00:00 GMT
     $current = $start;
     $step = 3600000000.0;
     try {
         $conn = new PDO("mysql:host={$servername};dbname={$dbname}", $username, $password);
         // set the PDO error mode to exception
         $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
         while (true) {
             if ($current >= $end) {
                 break;
             }
             $start_interval = $current;
             $end_interval = $start_interval + $step;
             $sql = "SELECT img_id, image, timestamp FROM Profiles_060_WTH_STATIC_EL90_Images_Stitch_Im1_3600 WHERE timestamp >= " . $start_interval . " AND timestamp < " . $end_interval;
             $stmt = $conn->query($sql);
             $row = $stmt->fetchObject();
             if ($row == false) {
                 $im->newImage($width, $height - $height * 20 / 100, "white");
             } else {
                 if (is_null($row->image)) {
                     $im->newImage($width, $height - $height * 20 / 100, "white");
                 } else {
                     $im->readimageblob($row->image);
                     $im->resizeImage($width, $height - $height * 20 / 100, Imagick::FILTER_LANCZOS, 1);
                 }
             }
             #$text = date('H:s', ($current / 1000000));
             #$draw = new ImagickDraw();
             $tick = new ImagickDraw();
             $ceiling = new ImagickDraw();
             /* Font properties */
             #$draw->setFont('Arial');
             #$draw->setFontSize(200);
             #$draw->setFillColor($color);
             #$draw->setStrokeAntialias(true);
             #$draw->setTextAntialias(true);
             /* Get font metrics */
             #$metrics = $image->queryFontMetrics($draw, $text);
             /* Create text */
             #$draw->annotation(0, $metrics['ascender']+20, $text);
             $tick->setStrokeWidth(10);
             $tick->setStrokeColor($color);
             $tick->setFillColor($color);
             $tick->line(0, 0, 0, 20);
             //imageline($image, $width/2, 0, $width/2, 50, $color);
             $ceiling->setStrokeColor($color);
             $ceiling->setFillColor($color);
             $ceiling->line(0, 0, $width, 0);
             /* Create image */
             $image->newImage($width, 20, $background);
             $image->setImageFormat('png');
             #$image->drawImage($draw);
             $image->drawImage($tick);
             $image->drawImage($ceiling);
             $im->addImage($image);
             $im->resetIterator();
             $tmp = $im->appendImages(true);
             $final->addImage($tmp);
             $current = $end_interval;
             $im->clear();
             $image->clear();
             $tmp->clear();
             $tick->clear();
             $ceiling->clear();
         }
     } catch (PDOException $e) {
         //echo "Connection failed: " . $e->getMessage();
     }
     /* Append the images into one */
     $final->resetIterator();
     $combined = $final->appendImages(false);
     /* Output the image */
     $combined->setImageFormat("png");
     $combined->resizeImage($width, $height - $height * 20 / 100, Imagick::FILTER_LANCZOS, 1);
     $draw = new ImagickDraw();
     /* Font properties */
     $draw->setFont('Arial');
     $draw->setFontSize(12);
     $draw->setFillColor($color);
     $draw->setStrokeAntialias(true);
     $draw->setTextAntialias(true);
     $runner = $start;
     $axis_interval = $width / 24;
     $i = 0;
     while ($runner < $end) {
         $text = date('H:s', $runner / 1000000);
         $metrics = $image->queryFontMetrics($draw, $text);
         $draw->annotation($i * $axis_interval, $metrics['ascender'] + 20, $text);
         $runner = $runner + $step;
         $i++;
     }
     $xaxis = new Imagick();
     $xaxis->newImage($width, 50, $background);
     $xaxis->setImageFormat('png');
     $xaxis->drawImage($draw);
     $with_axes->addImage($combined);
     $with_axes->addImage($xaxis);
     $with_axes->resetIterator();
     $output = $with_axes->appendImages(true);
     file_put_contents("{$TMP_PATH}/{$tmp_file}", $output);
     return array("img" => array("id" => $tmp_file, "yaxis" => "testest"), "div" => array("class" => "image-player", "xml" => "<div id='media'>" . "<div style='width:100px; margin: 0 auto;'>1367539200000000</div>" . "<div id='jet' class='colormap'></div>" . "<div class='range'><p class='lower'>-2</p><p class='upper'>2</p></div>" . "<div style='clear: both;'></div>" . "<div id='media-controls'>" . "<button id='play-pause-button' title='play' onclick='togglePlayPause();'>Play</button>" . "<button id='stop-button' title='stop' onclick='stopPlay();'>Stop</button>" . "<progress id='progress-bar' min='0' max='100' value='0' style='width:" . ($width - $width * 10 / 100) . "px'>0% played</progress>" . "</div>" . "</div>" . "<div id='timestamp1' style='display: none;' data='" . $start . "'></div>" . "<div id='timestamp2' style='display: none;' data='0'></div>"));
 }
Exemple #15
0
 private function imageProcessImageMagick()
 {
     $this->source_image_w = $this->image_info[0];
     $this->source_image_h = $this->image_info[1];
     $this->source_image_x = 0;
     $this->source_image_y = 0;
     $dst_x = 0;
     $dst_y = 0;
     if ($this->clipping != IMAGE_CORE_CM_DEFAULT) {
         // clipping method 1: left or top 2: middle 3: right or bottom
         $this->source_image_w -= $this->start_x;
         $this->source_image_h -= $this->start_y;
         if ($this->source_image_w * $this->height > $this->source_image_h * $this->width) {
             $match_w = round($this->width * $this->source_image_h / $this->height);
             $match_h = $this->source_image_h;
         } else {
             $match_h = round($this->height * $this->source_image_w / $this->width);
             $match_w = $this->source_image_w;
         }
         switch ($this->clipping) {
             case IMAGE_CORE_CM_LEFT_OR_TOP:
                 $this->source_image_x = 0;
                 $this->source_image_y = 0;
                 break;
             case IMAGE_CORE_CM_MIDDLE:
                 $this->source_image_x = round(($this->source_image_w - $match_w) / 2);
                 $this->source_image_y = round(($this->source_image_h - $match_h) / 2);
                 break;
             case IMAGE_CORE_CM_RIGHT_OR_BOTTOM:
                 $this->source_image_x = $this->source_image_w - $match_w;
                 $this->source_image_y = $this->source_image_h - $match_h;
                 break;
         }
         $this->source_image_w = $match_w;
         $this->source_image_h = $match_h;
         $this->source_image_x += $this->start_x;
         $this->source_image_y += $this->start_y;
     }
     $resize_height = $this->height;
     $resize_width = $this->width;
     if ($this->scale != IMAGE_CORE_SC_NOT_KEEP_SCALE) {
         if ($this->scale == IMAGE_CORE_SC_BEST_RESIZE_WIDTH) {
             $resize_height = round($this->width * $this->source_image_h / $this->source_image_w);
             $resize_width = $this->width;
         } else {
             if ($this->scale == IMAGE_CORE_SC_BEST_RESIZE_HEIGHT) {
                 $resize_width = round($this->height * $this->source_image_w / $this->source_image_h);
                 $resize_height = $this->height;
             }
         }
     }
     $im = new Imagick();
     $im->readimageblob(file_get_contents($this->source_image));
     $im->setCompressionQuality($this->quality);
     if ($this->source_image_x or $this->source_image_y) {
         $im->cropImage($this->source_image_w, $this->source_image_h, $this->source_image_x, $this->source_image_y);
     }
     $im->thumbnailImage($resize_width, $resize_height, true);
     if ($this->option == IMAGE_CORE_OP_TO_FILE and $this->new_image) {
         file_put_contents($this->new_image, $im->getimageblob());
     } else {
         if ($this->option == IMAGE_CORE_OP_OUTPUT) {
             $output = $im->getimageblob();
             $outputtype = $im->getFormat();
             header("Content-type: {$outputtype}");
             echo $output;
             die;
         }
     }
     return TRUE;
 }
Exemple #16
0
 /**
  * Convert datas Format IN > Format OUT.
  *
  * @param string $format
  *
  * @throws \Exception
  *
  * @return string
  */
 public function getConvertData($format)
 {
     $datas = null;
     try {
         $im = new \Imagick();
         $im->readimageblob($this->data);
         $im->setiteratorindex($this->page - 1);
         $im->setImageFormat($format);
         $datas = $im->getimageblob();
     } catch (\ImagickException $e) {
         $page_opt = null !== $this->page ? sprintf('-e PageRange=%d-%d', $this->page, $this->page) : '';
         $uniq_name = $this->tmp . uniqid('UNO');
         $actual_file = sprintf('%s.%s', $uniq_name, $this->format ?: 'tmp');
         if (!is_dir($this->tmp)) {
             throw new \Exception('Directory tmp is not exist');
         }
         try {
             $process = $this->getProcess();
             $process->setCmd(sprintf('cat - > %s && unoconv %s -f %s --stdout %s', $actual_file, $page_opt, $format, $actual_file))->setInput($this->data);
             $datas = $process->run();
         } catch (ProcessException $e) {
             $process = $this->getProcess();
             $process->setCmd(sprintf('cat - > %s && unoconv %s -f pdf %s && unoconv -f %s --stdout %s.pdf', $actual_file, $page_opt, $actual_file, $format, $uniq_name))->setInput($this->data);
             $datas = $process->run();
         }
         $process = $this->getProcess();
         $process->setCmd(sprintf('rm -f %s.*', $uniq_name))->run();
     }
     return $datas;
 }
Exemple #17
0
    static function nonImageAddTexte($text, $fontfile, $fontsize)
    {
        $svg = '<?xml version="1.0" encoding="utf-8"?>

<!-- The icon can be used freely in both personal and commercial projects with no attribution required, but always appreciated.
You may NOT sub-license, resell, rent, redistribute or otherwise transfer the icon without express written permission from iconmonstr.com -->

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="512px" height="512px" viewBox="0 0 512 512" xml:space="preserve">
<defs>
<linearGradient id="degrade" x1="100%" y1="0" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#898989; stop-opacity:0.2;"/>
<stop offset="40%" style="stop-color:#464646; stop-opacity:1;"/>
<stop offset="100%" style="stop-color:#111111; stop-opacity:0.7;"/>
</linearGradient>
<linearGradient id="degrade1" x1="100%" y1="0" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#111111; stop-opacity:0.7;"/>
<stop offset="40%" style="stop-color:#AAAAAA; stop-opacity:1;"/>
<stop offset="100%" style="stop-color:#F0F0F0; stop-opacity:0.2;"/>
</linearGradient>

<style type="text/css">
#stop1{ stop-color:chartreuse; stop-opacity:0.2; } #stop2{ stop-color:cornflowerblue; stop-opacity:1; } #stop3{ stop-color:chartreuse; stop-opacity:0.7; }

</style>
</defs>
<path style="fill:url(#degrade); stroke:#BBBBBB; stroke-width:2px;" id="video-icon" d="M50,60.345v391.311h412V60.345H50z M137.408,410.862H92.354v-38.747h45.055V410.862z M137.408,343.278
	H92.354v-38.747h45.055V343.278z M137.408,275.372H92.354v-38.747h45.055V275.372z M137.408,208.111H92.354v-38.748h45.055V208.111z
	 M137.408,140.526H92.354v-38.747h45.055V140.526z M337.646,410.862H177.961V275.694h159.685V410.862z M337.646,236.947H177.961
	V101.779h159.685V236.947z M423.253,410.862h-45.054v-38.747h45.054V410.862z M423.253,343.278h-45.054v-38.747h45.054V343.278z
	 M423.253,275.372h-45.054v-38.747h45.054V275.372z M423.253,208.111h-45.054v-38.748h45.054V208.111z M423.253,140.526h-45.054
	v-38.747h45.054V140.526z"/>
</svg>
';
        $im2 = new \Imagick();
        $im2->setBackgroundColor(new \ImagickPixel('transparent'));
        $im2->readimageblob($svg);
        $im2->setImageFormat("png");
        $im2->adaptiveResizeImage(140, 140);
        /*Optional, if you need to resize*/
        //return $im2->getimageblob();
        $im = new \Imagick();
        $im->newimage(260, 300, new \ImagickPixel('#999999'), "jpeg");
        $im->compositeimage($im2, \Imagick::COMPOSITE_DEFAULT, 60, 80);
        $widthmax = $im->getImageGeometry()["width"];
        $draw = new \ImagickDraw();
        /* On commence un nouveau masque nommé "gradient" */
        $draw->setFillColor('#FFFFFF');
        /* Font properties */
        $draw->setFont($fontfile);
        $draw->setFontSize($fontsize);
        $draw->setGravity(\Imagick::GRAVITY_NORTH);
        $words = explode(' ', $text);
        //Test si la fontsize n'est pas trop grosse pour un mot
        $i = 0;
        while ($i < count($words)) {
            $lineSize = $im->queryfontmetrics($draw, $words[$i])["textWidth"];
            if ($lineSize < $widthmax) {
                $i++;
            } else {
                $fontsize--;
                $draw->setFontSize($fontsize);
            }
        }
        $res = $words[0];
        for ($i = 1; $i < count($words); $i++) {
            $lineSize = $im->queryfontmetrics($draw, $res . " " . $words[$i]);
            if ($lineSize["textWidth"] < $widthmax) {
                $res .= " " . $words[$i];
            } else {
                $res .= "\n" . $words[$i];
            }
        }
        /* Create text */
        $im->annotateImage($draw, 0, 0, 0, $res);
        return $im->getimageblob();
    }
Exemple #18
0
 function GetView()
 {
     global $TMP_PATH;
     $tmp_file = ADEI::GetTmpFile();
     $servername = "localhost";
     $username = "******";
     $password = "******";
     $dbname = "HDCP10";
     $width = 800;
     $height = 600;
     $window = "1365832800-1365854400";
     $interval = explode("-", $this->window);
     $total_seconds = $interval[1] - $interval[0];
     $start = $interval[0] * 1000000;
     $end = $interval[1] * 1000000;
     $im = new Imagick();
     $draw2 = new ImagickDraw();
     $draw2->setStrokeColor("#808080");
     $draw2->setStrokeWidth(1);
     $draw2->setFontSize(72);
     $draw2->line(700, 240, 800, 240);
     $ystroke = new Imagick();
     $ystroke->newImage(800, 480, "white");
     $ystroke->setImageFormat("png");
     $ystroke->drawImage($draw2);
     $im->addImage($ystroke);
     $draw = new ImagickDraw();
     $draw->setStrokeColor("#808080");
     $draw->setStrokeWidth(100);
     $draw->setFontSize(72);
     $draw->line(100, 0, 100, 480);
     $yaxis = new Imagick();
     $yaxis->newImage(100, 480, "white");
     $yaxis->setImageFormat("png");
     $yaxis->drawImage($draw);
     $im->addImage($yaxis);
     try {
         $conn = new PDO("mysql:host={$servername};dbname={$dbname}", $username, $password);
         // set the PDO error mode to exception
         $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
         $sql = "SELECT count(*) FROM Profiles_060_WTH_STATIC_EL90_Images_1 WHERE P_id = 8";
         $stmt = $conn->query($sql);
         $row = $stmt->fetch();
         $total = $row[0];
         $sql = "SELECT img_id, image FROM Profiles_060_WTH_STATIC_EL90_Images_1 WHERE P_id = 8 ORDER BY img_id ASC";
         $stmt = $conn->query($sql);
         while ($row = $stmt->fetchObject()) {
             if (is_null($row->image)) {
                 $im->newImage(7, 480, "white");
                 continue;
             }
             $im->readimageblob($row->image);
         }
     } catch (PDOException $e) {
         //echo "Connection failed: " . $e->getMessage();
     }
     /* Create new imagick object */
     //$im = new Imagick();
     /* create red, green and blue images */
     //$im->newImage(100, 50, "red");
     //$im->newImage(100, 50, "green");
     //$im->newImage(100, 50, "blue");
     /* Append the images into one */
     $im->resetIterator();
     $combined = $im->appendImages(false);
     /* Output the image */
     $combined->setImageFormat("png");
     /* 
     Having to do alot of resizing, i needed to know the speeds of the different resize filters.
     This was how long it took to resize a 5906x5906 JPEG image to 1181x1181.
     
     FILTER_POINT took: 0.334532976151 seconds
     FILTER_BOX took: 0.777871131897 seconds
     FILTER_TRIANGLE took: 1.3695909977 seconds
     FILTER_HERMITE took: 1.35866093636 seconds
     FILTER_HANNING took: 4.88722896576 seconds
     FILTER_HAMMING took: 4.88665103912 seconds
     FILTER_BLACKMAN took: 4.89026689529 seconds
     FILTER_GAUSSIAN took: 1.93553304672 seconds
     FILTER_QUADRATIC took: 1.93322920799 seconds
     FILTER_CUBIC took: 2.58396601677 seconds
     FILTER_CATROM took: 2.58508896828 seconds
     FILTER_MITCHELL took: 2.58368492126 seconds
     FILTER_LANCZOS took: 3.74232912064 seconds
     FILTER_BESSEL took: 4.03305602074 seconds
     FILTER_SINC took: 4.90098690987 seconds
     */
     $combined->resizeImage(1200, 600, Imagick::FILTER_LANCZOS, 1);
     #$draw3 = new ImagickDraw();
     #$draw3->setStrokeColor("black");
     //$draw3->setFillColor($fillColor);
     #$draw3->setStrokeWidth(0.1);
     #$draw3->setFontSize(8);
     #$combined->annotateImage($draw3, 0, 300, 0, "500");
     file_put_contents("{$TMP_PATH}/{$tmp_file}", $combined);
     return array("img" => array("id" => $tmp_file));
 }
Exemple #19
0
/**
 * Generates a render of schedule's SVG. The PNG render of the image will be
 * stored in /img/schedules/ with a filename equal to the id of the schedule.
 * @param   $svg    string  The SVG code for the image
 * @param   $id     string  The ID of the schedule, for file name generation
 * @return  bool    True on success, False otherwise.
 */
function renderSvg($svg, $id)
{
    try {
        // Prepend parsing info
        $svg = preg_replace('/(.*<svg[^>]* width=")(100\\%)(.*)/', '${1}1000px${3}', $svg);
        $svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' . $svg;
        // Load the image into an ImageMagick object
        $im = new Imagick();
        $im->readimageblob($svg);
        // Convert it to png
        $im->setImageFormat("png24");
        $im->scaleimage(1000, 600, true);
        // Write it to the filesystem
        $im->writeimage("../img/schedules/{$id}.png");
        $im->clear();
        $im->destroy();
        // Success!
        return true;
    } catch (Exception $e) {
        return false;
    }
}
            header('Content-Disposition: attachment; filename="shield.png"');
            header('Content-Type: image/png');
            echo $im->getimageblob();
            break;
    }
} else {
    switch ($options['outputFormat']) {
        case 'jpg':
            $im = new Imagick();
            $im->readimageblob($output);
            $im->setimageformat('jpeg');
            $im->setimagecompressionquality(90);
            // $im->scaleimage(1000,1200);
            header('Content-Type: image/jpg');
            echo $im->getimageblob();
            break;
        case 'png':
            $im = new Imagick();
            $im->readimageblob($output);
            $im->setimageformat('png');
            // $im->scaleimage(1000,1200);
            header('Content-Type: image/png');
            echo $im->getimageblob();
            break;
        default:
        case 'svg':
            header('Content-Type: text/xml; charset=utf-8');
            echo $output;
            break;
    }
}
Exemple #21
0
 while (true) {
     if ($current >= $end) {
         break;
     }
     $start_interval = $current;
     $end_interval = $start_interval + $step;
     $sql = "SELECT img_id, image, timestamp FROM Profiles_060" . "_WTH_STATIC_EL90_Images_Stitch_Im1_" . $aggr . " WHERE timestamp >= " . $start_interval . " AND timestamp < " . $end_interval;
     $stmt = $conn->query($sql);
     $row = $stmt->fetchObject();
     if ($row == false) {
         $im->newImage($width, $height, "white");
     } else {
         if (is_null($row->image)) {
             $im->newImage($width, $height, "white");
         } else {
             $im->readimageblob($row->image);
             $im->resizeImage($width, $height, Imagick::FILTER_LANCZOS, 1);
         }
     }
     $tick = new ImagickDraw();
     $tick->setStrokeWidth(10);
     $tick->setStrokeColor($color);
     $tick->setFillColor($color);
     $tick->line(0, 0, 0, 20);
     $ceiling = new ImagickDraw();
     $ceiling->setStrokeColor($color);
     $ceiling->setFillColor($color);
     $ceiling->line(0, 0, $width, 0);
     /* Create image */
     $image->newImage($width, 20, $background);
     $image->setImageFormat('png');
 /**
  * @Route("/{id}/image/{image_id}", name="activity_image")
  * @Method("GET")
  */
 public function getImageAction($id, $image_id, Request $request)
 {
     $width = $request->query->get("width");
     $em = $this->getDoctrine()->getManager();
     $entity = $em->getRepository('OesteveGrupetaBundle:Activity')->find($id);
     if (!$entity) {
         throw $this->createNotFoundException('Unable to find Activity    entity.');
     }
     $authChecker = $this->get('security.authorization_checker');
     if (false === $authChecker->isGranted(ActivityVoter::VIEW, $entity)) {
         throw $this->createAccessDeniedException('Unauthorized access!');
     }
     $image = $em->getRepository('OesteveGrupetaBundle:Image')->find($image_id);
     if (!$image_id) {
         throw $this->createNotFoundException('Unable to find Imagen entity.');
     }
     $fileContent = base64_decode($image->getContent());
     if ($width != null) {
         $tmpDir = $this->container->getParameter('tmp_dir');
         $cachedDirName = $tmpDir . '/activities/';
         $cachedFileName = $cachedDirName . '/img_' . $width . '_' . $image->getId();
         if (!file_exists($cachedDirName)) {
             mkdir($cachedDirName, 0777, TRUE);
         }
         if (file_exists($cachedFileName)) {
             $fileContent = file_get_contents($cachedFileName);
         } else {
             $img = new \Imagick();
             $img->readimageblob($fileContent);
             //Hacer una miniatura de una imagen cargada. 0 para los ejes preserva la proporción de aspecto
             $img->thumbnailImage($width, 0);
             $fileContent = $img->getimageblob();
             if ($tmpDir != null) {
                 file_put_contents($cachedFileName, $fileContent);
             }
         }
     }
     $f = finfo_open();
     $mime_type = finfo_buffer($f, $fileContent, FILEINFO_MIME_TYPE);
     $response = new Response();
     $response->headers->set('Content-Type', $mime_type);
     $response->headers->set('Expires', 0);
     $response->headers->set('Cache-Control', 'must-revalidate');
     $response->headers->set('Pragma', 'public');
     $response->headers->set('Content-length', strlen($fileContent));
     $response->setContent($fileContent);
     return $response;
 }
    $results["error"] = "PHP code received no \$_REQUEST?";
    echo json_encode($results);
    exit;
}
if (!isset($_REQUEST["_window"])) {
    $results['error'] = "Error in call";
    echo json_encode($results);
    exit;
}
$font = '/usr/share/fonts/TTF/LiberationSans-BoldItalic.ttf';
$size = 75;
/* Create Imagick object from background file*/
$imagestr = "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";
// $image = new Imagick( 'cap_bg.jpg' );
$image = new Imagick();
$image->readimageblob(base64_decode($imagestr));
srand(make_seed());
$cstrong = true;
$captcha = substr(strtolower(base64_encode(openssl_random_pseudo_bytes(4, $cstrong))), 0, 6);
$captcha = str_replace("+", "t", $captcha);
$captcha = str_replace("/", "l", $captcha);
$captcha = str_replace("=", "e", $captcha);
$captcha = str_replace("l", "1", $captcha);
$captcha = str_replace("i", "x", $captcha);
$captcha = str_replace("0", "8", $captcha);
$captcha = str_replace("o", "8", $captcha);
$id = base64_encode(openssl_random_pseudo_bytes(20, $cstrong));
/* Create a drawing object and set the font size */
$ImagickDraw = new ImagickDraw();
$ImagickDraw->setFont($font);
$ImagickDraw->setFontSize($size);
Exemple #24
0
 /**
  * Instantiates and returns Image Magick object
  * @return \imagick
  */
 protected function getImagick()
 {
     if (!$this->iMagick) {
         $iMagick = new Imagick();
         $iMagick->readimageblob($this->content);
         $this->iMagick = $iMagick;
     }
     return $this->iMagick;
 }
Exemple #25
0
 /**
  * @Route("/{id}/image/{image_id}", name="gallery_image")
  * 
  * @ParamConverter("gallery", class="OesteveGrupetaBundle:Gallery", options={"mapping" ={"id" = "id"}})
  * @ParamConverter("image", class="OesteveGrupetaBundle:Image", options={"mapping" ={"image_id" = "id"}})
  * 
  * @Method("GET")
  */
 public function getImageAction(Gallery $gallery, Image $image, Request $request)
 {
     $width = $request->query->get("width");
     $fileContent = base64_decode($image->getContent());
     if ($width != null) {
         $tmpDir = $this->container->getParameter('tmp_dir');
         $cachedDirName = $tmpDir . '/activities/';
         $cachedFileName = $cachedDirName . '/img_' . $width . '_' . $image->getId();
         if (!file_exists($cachedDirName)) {
             mkdir($cachedDirName, 0777, TRUE);
         }
         if (file_exists($cachedFileName)) {
             $fileContent = file_get_contents($cachedFileName);
         } else {
             $img = new \Imagick();
             $img->readimageblob($fileContent);
             //Hacer una miniatura de una imagen cargada. 0 para los ejes preserva la proporción de aspecto
             $img->thumbnailImage($width, 0);
             $fileContent = $img->getimageblob();
             if ($tmpDir != null) {
                 file_put_contents($cachedFileName, $fileContent);
             }
         }
     }
     $f = finfo_open();
     $mime_type = finfo_buffer($f, $fileContent, FILEINFO_MIME_TYPE);
     $response = new Response();
     $response->headers->set('Content-Type', $mime_type);
     $response->headers->set('Expires', 0);
     $response->headers->set('Cache-Control', 'must-revalidate');
     $response->headers->set('Pragma', 'public');
     $response->headers->set('Content-length', strlen($fileContent));
     $response->setContent($fileContent);
     return $response;
 }