Файл: panel/screen.php
Строк: 78
<?php
require '../system/core.php';
/* Проверяем права доступа */
if (!$login) message('Ошибка авторизации!', '/panel/login.php');
if (!check_right($user['id'], 5, $db)) message('Недостаточно прав!', '/panel/index.php');
/* Если не указан файл */
if (!isset($_GET['id'])) {
message('Вы не указали файл!', '/panel/index.php');
}
/* Ищем указанный файл в БД */
$query = $db->query("SELECT * FROM `data` WHERE `id`='" . num($_GET['id']) . "'");
if ($db->num($query) != 1) {
message('Указанный файл не найден!', '/panel/index.php');
}
$result = $db->fetch($query);
$path_dir = $_SERVER['DOCUMENT_ROOT'] . '/files/screens/' . $result['id'] . '/';
if (!empty($_POST)) {
$path = $_SERVER['DOCUMENT_ROOT'] . '/' . $result['file'];
function imageresize2($input, $output, $outheight, $outwidth = 0)
{
//exit($output);
$err = array();
if (!is_file($input)) {
$err[] = 'Файла по пути <b>' . $input . '</b> не существует';
}
if (empty($err)) {
$im = new imagick($input);
$imageprop = $im->getImageGeometry();
$width = $imageprop['width'];
$height = $imageprop['height'];
if (empty($outwidth)) {
$outwidth = ($outheight / $height) * $width;
}
$im->resizeImage($outwidth, $outheight, imagick::FILTER_LANCZOS, 1);
$im->writeImage($output);
}
}
function movie_progress($video, $screens_path = FALSE, $screens_count = 10)
{
if ($screens_count > 30) {
exit('Слишком много скриншотов');
}
$movie = new ffmpeg_movie($video);
if (!$movie) {
return;
}
$frame_count = $movie->getFrameCount();
// получаем скриншоты
$screens = FALSE;
if ($screens_path) {
// определяем интервал, через который будем извлекать скрины
$step = floor($frame_count / ($screens_count));
$screens = array();
// извлекаем скриншоты, и складываем пути в массив
$count = 1;
for ($i = $step; $i < $frame_count; $i += $step) {
$filename = $screens_path . $count . '.jpg';
$frame = $movie->getFrame($i);
$image = $frame->toGDImage();
imagepng($image, $filename);
if (is_file($filename)) {
$screens[] = $filename;
}
/* Минимизация */
echo 'TEST: ' . $screens_path . 'min_' . $count . '.jpg<br/>';
imageresize2($filename, $screens_path . 'min_' . $count . '.jpg', 240);
$count++;
}
}
// возвращаем статистику и список скринов
return array(
'width' => $movie->getFrameWidth(), // ширина в пикселях
'height' => $movie->getFrameHeight(), // высота в пикселях
'frame_count' => $frame_count, // количество фреймов
'bitrate' => $movie->getBitRate(), // битрейт
'video_bitrate' => $movie->getVideoBitRate(),
'video_codec' => $movie->getVideoCodec(),
'audio_codec' => $movie->getAudioCodec(),
'screens' => $screens, // массив со скриншотами
);
}
if (!file_exists($path_dir)) {
mkdir($path_dir);
}
$_POST['count'] = (int)$_POST['count'];
movie_progress($path, $path_dir, $_POST['count']);
}
/* Выводим страницу */
$data['title'] = 'Управление скриншотами';
$data['result'] = $result;
if (file_exists($path_dir)) {
$screens = scandir($path_dir);
} else {
$screens = array();
}
$data['screens'] = array();
if (count($screens)) {
foreach ($screens AS $name) {
if (strripos($name, 'min') !== false) {
$data['screens'][] = $name;
}
}
}
$tpl->display('panel/screen', $data);