public function setFile($path) { $finfo = new finfo(FILEINFO_MIME_TYPE); $mime = $finfo->file($path); if (!in_array($mime, GiiyVideoTypeEnum::$mime)) { throw new CException('wrong video file'); } $movie = new FFmpegMovie($path); $this->type = GiiyVideoTypeEnum::createByMime($mime); if ($this->type->id != GiiyVideoTypeEnum::FLV) { $movie->convertToFLV(); $this->type = new GiiyVideoTypeEnum(GiiyVideoTypeEnum::FLV); $movie = new FFmpegMovie($path); } $this->width = $movie->getFrameWidth(); $this->height = $movie->getFrameHeight(); $this->duration = $movie->getDuration(); $this->bit_rate = $movie->getVideoBitRate(); $this->codec = $movie->getVideoCodec(); try { $gd = $movie->getFrameAtTime($this->duration / 2)->toGDImage(); $tmpFile = TMP_PATH . DIRECTORY_SEPARATOR . uniqid('video_'); imagepng($gd, $tmpFile); $preview = new GiiyPicture(); $preview->name = 'video preview for ' . $this->name; $preview->setFile($tmpFile); $preview->save(); $this->picture = $preview; unlink($tmpFile); } catch (Exception $e) { } if (!$this->id) { $this->_tmpPath = $path; } elseif ($path != $this->getPath()) { copy($path, $this->getPath()); } }
/** * rote pattern example: * GiiyModule::$pixUrl.'/resize/<id1:\d+>/<id2:\d+>/<width:\d+>x<height:\d+>.<type:\w+>' => 'giiy/giiyResize/resize' * * @param $id1 * @param $id2 * @param $width * @param $height * @param $type * @throws CHttpException */ public function actionResize($id1, $id2, $width, $height, $type) { $id = $id1 * 1000 + $id2; /** @var GiiyPicture $picture */ $picture = GiiyPicture::model()->findByPk($id); if (!$picture) { throw new CHttpException(404, 'The requested page does not exist.'); } if ($picture->resize($width, $height) !== null) { header("Content-type: " . $picture->getType()->getMime()); echo file_get_contents($picture->getResizePath($width, $height)); exit; } throw new CHttpException(404, 'The requested page does not exist.'); }