/** * Store a newly created resource in storage. * * @return Response */ public function store() { $s3 = AWS::get('s3'); $s3Bucket = 'buildbrighton-bbms'; if (Request::hasFile('image')) { $file = Request::file('image'); $event = Request::get('textevent'); $time = Request::get('time'); $fileData = Image::make($file)->encode('jpg', 80); $date = Carbon::createFromFormat('YmdHis', $event); $folderName = $date->hour . ':' . $date->minute . ':' . $date->second; try { $newFilename = \App::environment() . '/cctv/' . $date->year . '/' . $date->month . '/' . $date->day . '/' . $folderName . '/' . $time . '.jpg'; $s3->putObject(array('Bucket' => $s3Bucket, 'Key' => $newFilename, 'Body' => $fileData, 'ACL' => 'public-read', 'ContentType' => 'image/jpg', 'ServerSideEncryption' => 'AES256')); } catch (\Exception $e) { \Log::exception($e); } //Log::debug('Image saved :https://s3-eu-west-1.amazonaws.com/buildbrighton-bbms/'.$newFilename); } if (Request::get('eventend') == 'true') { $event = Request::get('textevent'); $date = Carbon::createFromFormat('YmdHis', $event); $folderName = $date->hour . ':' . $date->minute . ':' . $date->second; $iterator = $s3->getIterator('ListObjects', array('Bucket' => $s3Bucket, 'Prefix' => \App::environment() . '/cctv/' . $date->year . '/' . $date->month . '/' . $date->day . '/' . $folderName)); $images = []; $imageDurations = []; foreach ($iterator as $object) { $images[] = 'https://s3-eu-west-1.amazonaws.com/buildbrighton-bbms/' . $object['Key']; $imageDurations[] = 35; } if (count($images) <= 2) { //only two images, probably two bad frames //delete them foreach ($iterator as $object) { Log::debug("Deleting small event image " . $object['Key']); $s3->deleteObject(['Bucket' => $s3Bucket, 'Key' => $object['Key']]); } return; } $gc = new GifCreator(); $gc->create($images, $imageDurations, 0); $gifBinary = $gc->getGif(); //Delete the individual frames now we have the gif foreach ($iterator as $object) { //Log::debug("Processed gif, deleting frame, ".$object['Key']); $s3->deleteObject(['Bucket' => $s3Bucket, 'Key' => $object['Key']]); } //Save the gif $newFilename = \App::environment() . '/cctv/' . $date->year . '/' . $date->month . '/' . $date->day . '/' . $folderName . '.gif'; $s3->putObject(array('Bucket' => $s3Bucket, 'Key' => $newFilename, 'Body' => $gifBinary, 'ACL' => 'public-read', 'ContentType' => 'image/gif', 'ServerSideEncryption' => 'AES256')); //Log::debug('Event Gif generated :https://s3-eu-west-1.amazonaws.com/buildbrighton-bbms/'.$newFilename); \Slack::to("#cctv")->attach(['image_url' => 'https://s3-eu-west-1.amazonaws.com/buildbrighton-bbms/' . $newFilename, 'color' => 'warning'])->send('Movement detected'); } }
/** * This function is extended from the baseoutput class. * It creates and saves the game cycles as a gif file to /v1/tmp/gif. * * @param GameFieldController $_gameFieldController The gamefieldcontroller which contains the gamefield. * @param int $_numCycles The amount of rounds the game should be played. */ public function output(GameFieldController $_gameFieldController, $_numCycles) { $pngCreator = new PngCreator(); $gifCreator = new GifCreator(0, 2, array(-1, -1, -1)); for ($cycle = 0; $cycle < $_numCycles; $cycle++) { // Creates a png for each cycle and adds it to the gif frame. $pngCreator->createPng($_gameFieldController->getGameField(), $cycle); $gifCreator->addFrame(file_get_contents(__DIR__ . "/../../tmp/png/png" . $cycle . ".png"), 50); unlink(__DIR__ . "/../../tmp/png/png" . $cycle . ".png"); $_gameFieldController->run(); } file_put_contents(__DIR__ . "/../../tmp/gif/animation.gif", $gifCreator->getAnimation()); }
protected function _resize_animated_gif($max_w, $max_h, $crop = false) { $frame_resources = array(); // GD resources of each frame $durations = array(); // ms duration of each frame $gfe = new GifFrameExtractor(); $gfe->extract($this->file); // get frames from gif $dims = image_resize_dimensions($this->size['width'], $this->size['height'], $max_w, $max_h, $crop); if (!$dims) { return new WP_Error('error_getting_dimensions', __('Could not calculate resized image dimensions'), $this->file); } list($dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h) = $dims; foreach ($gfe->getFrames() as $frame) { $img = $frame["image"]; $duration = $frame["duration"]; $frame_resize_resource = wp_imagecreatetruecolor($dst_w, $dst_h); // resize frame imagecopyresampled($frame_resize_resource, $img, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h); if (is_resource($frame_resize_resource)) { $frame_resources[] = $frame_resize_resource; $durations[] = $duration; } } if ($frame_resources) { $this->update_size($dst_w, $dst_h); // reconstruct small gif: $gc = new GifCreator(); $gc->create($frame_resources, $durations, 0); return $gc; } else { return new WP_Error('image_resize_error', __('Image resize failed.'), $this->file); } }
require_once 'GifCreator.class'; $configuration = json_decode(file_get_contents('config.json')); $recordings_dir = 'recordings'; $durations = array(); if (function_exists('imagegif')) { $data = file_get_contents("php://input"); header('Content-type: application/json'); if ($data != false) { $images = json_decode($data); if (isset($images)) { if (sizeof($images) > 0) { $filename = basename($images[0], '.jpg'); foreach ($images as $image) { array_push($durations, $configuration->animgif_frame_duration); } $gc = new GifCreator(); $gc->create($images, $durations, $configuration->animgif_loop_count); $gifBinary = $gc->getGif(); $gif_filename = $recordings_dir . '/' . $filename . '.gif'; if (file_put_contents($gif_filename, $gifBinary) > 0) { echo '["Successfuly created. <a href=\\"view_gif.php?img=' . $gif_filename . '\\">View</a>"]'; } } } else { echo '["Bad data"]'; } } else { echo '["No data"]'; } } else { echo '["Sorry. Your installation does not support GIF creation."]';
public function processFolioImage($aFile, $folder, $aName, $imageInfo) { $ext = self::_getImageExt($aFile['type']); if (empty($ext)) { $this->setMessage(iaLanguage::getf('file_type_error', array('extension' => implode(', ', array_unique(self::$_typesMap))))); return false; } $path = IA_UPLOADS . $folder; $image = ImageWorkshop::initFromPath($aFile['tmp_name']); // save source image $image->save($path, self::SOURCE_PREFIX . $aName . $ext); // process thumbnails for files uploaded in CKEditor and other tools if (empty($imageInfo)) { // apply watermark $image = self::_applyWaterMark($image); $image->save($path, self::_createFilename($aName, $ext)); return true; } // check this is an animated GIF if ('image/gif' == $aFile['type'] && $this->iaCore->get('allow_animated_gifs')) { require_once IA_INCLUDES . 'phpimageworkshop' . IA_DS . 'Core' . IA_DS . 'GifFrameExtractor.php'; $gifPath = $aFile['tmp_name']; if (GifFrameExtractor::isAnimatedGif($gifPath)) { // Extractions of the GIF frames and their durations $gfe = new GifFrameExtractor(); $frames = $gfe->extract($gifPath); // For each frame, we add a watermark and we resize it $retouchedFrames = array(); $thumbFrames = array(); foreach ($frames as $frame) { $frameLayer = ImageWorkshop::initFromResourceVar($frame['image']); $thumbLayer = ImageWorkshop::initFromResourceVar($frame['image']); $frameLayer->resizeInPixel($imageInfo['image_width'], $imageInfo['image_height'], true); $frameLayer = self::_applyWaterMark($frameLayer); $retouchedFrames[] = $frameLayer->getResult(); $thumbLayer->resizeInPixel($imageInfo['thumb_width'], $imageInfo['thumb_height'], true); $thumbFrames[] = $thumbLayer->getResult(); } // Then we re-generate the GIF require_once IA_INCLUDES . 'phpimageworkshop' . IA_DS . 'Core' . IA_DS . 'GifCreator.php'; $gc = new GifCreator(); $gc->create($retouchedFrames, $gfe->getFrameDurations(), 0); file_put_contents($path . self::_createFilename($aName, $ext), $gc->getGif()); $thumbCreator = new GifCreator(); $thumbCreator->create($thumbFrames, $gfe->getFrameDurations(), 0); file_put_contents($path . self::_createFilename($aName, $ext, true), $thumbCreator->getGif()); return self::_createFilename($folder . $aName, $ext, true); } } // save full image $largestSide = $imageInfo['image_width'] > $imageInfo['image_height'] ? $imageInfo['image_width'] : $imageInfo['image_height']; if ($largestSide) { $image->resizeByLargestSideInPixel($largestSide, true); } $image = self::_applyWaterMark($image); $image->save($path, self::_createFilename($aName, $ext)); // generate thumbnail $thumbWidth = $imageInfo['thumb_width'] ? $imageInfo['thumb_width'] : $this->iaCore->get('thumb_w'); $thumbHeight = $imageInfo['thumb_height'] ? $imageInfo['thumb_height'] : $this->iaCore->get('thumb_h'); $positionX = $imageInfo['positionX'] ? $imageInfo['positionX'] : 0; $positionY = $imageInfo['positionY'] ? $imageInfo['positionY'] : 0; $position = $imageInfo['position'] ? $imageInfo['position'] : 'MM'; $resize = $imageInfo['resize'] ? $imageInfo['resize'] : 'before_crop'; $cropWidth = $imageInfo['crop_width'] ? $imageInfo['crop_width'] : ''; $cropHeight = $imageInfo['crop_height'] ? $imageInfo['crop_height'] : ''; if ($thumbWidth || $thumbHeight) { $thumb = ImageWorkshop::initFromPath($aFile['tmp_name']); switch ($imageInfo['resize_mode']) { case self::FIT: $thumb->resizeInPixel($thumbWidth, $thumbHeight, true, 0, 0, 'MM'); break; case self::CROP: $largestSide = $thumbWidth > $thumbHeight ? $thumbWidth : $thumbHeight; if ($this->iaCore->get('portfolio_use_crop')) { if ('after_crop' == $resize) { // $thumb->cropMaximumInPixel(0, 0, 'MM'); $thumb->cropInPixel($cropWidth, $cropHeight, $positionX, $positionY, $position); $thumb->resizeInPixel($thumbWidth, $thumbHeight); } else { $thumb->cropMaximumInPixel(0, 0, 'MM'); $thumb->resizeInPixel($largestSide, $largestSide); $thumb->cropInPixel($thumbWidth, $thumbHeight, $positionX, $positionY, $position); } } else { $thumb->cropMaximumInPixel(0, 0, 'MM'); $thumb->resizeInPixel($largestSide, $largestSide); $thumb->cropInPixel($thumbWidth, $thumbHeight, 0, 0, 'MM'); } } $thumb->save($path, self::_createFilename($aName, $ext, true)); } return self::_createFilename($folder . $aName, $ext, true); }
$delays = explode(",", $delay); foreach ($delays as $i => $dl) { $dl = intval(trim($dl)); $delayList[] = $dl * 10; } if ($rewind) { //print "REWIND"; for ($i = count($gifFrameList) - 2; $i > 0; $i--) { $gifFrameList[] = $gifFrameList[$i]; } for ($i = count($delayList) - 2; $i > 0; $i--) { $delayList[] = $delayList[$i]; } //print_r($gifFrameList); } $gc = new GifCreator(); $gc->create($gifFrameList, $delayList, 0); $gifBinary = $gc->getGif(); file_put_contents("{$folderName}/{$spriteName}" . "_{$dir}.gif", $gifBinary); //print "<br><b>Animated: </b>"; print "<img src='{$folderName}/{$spriteName}" . "_{$dir}.gif' alt='{$spriteName}'>"; } } $spriteNumber += $frames * $dirs; } if (!file_exists("done")) { mkdir("done"); } copy("in/" . $inFile, "done/" . $inFile); unlink("in/" . $inFile); $spritesPerLoad -= $spriteNumber;
$mapa->save($arqtemp . ".map"); if (!file_exists($nomec)) { if ($objImagem == "") { $objImagem = $mapa->draw(); $objImagem->saveImage($nomec); } else { $i = $mapa->draw(); $objImagem->pasteImage($i, -1); $objImagem->saveImage($nomec); } } $imagens[] = $nomec; $duracao[] = $tempo; //$mapa->save($arqtemp.".map");exit; } restauraConObj($mapa, $postgis_mapa); $mapa->save($arqtemp . ".map"); unlink($arqtemp . ".map"); $mapa = null; //junta as imagens no gif include "../../pacotes/gifcreator/GifCreator.php"; $gc = new GifCreator(); $gc->create($imagens, $duracao, 0); $gifBinary = $gc->getGif(); file_put_contents($arqtemp . ".gif", $gifBinary); //retorna o gif para o navegador ob_clean(); header('Content-type: image/gif'); header('Content-Disposition: filename="' . $tema . '.gif"'); echo $gifBinary; exit;