Автопревью

510
.
Нефиг было делать, дык решил написать мини-статью о том как зделать для своего ЗЦ(и не только) автоскриншотеры. Скриншотеры будут для видеофайлов и тем. Для начала зделаем определение типа файла в самом ЗЦ(для теста я брал стандартный ЗЦ с 3.х.х) у /download/view.php добавляем код:
$arrtype = pathinfo($adrfile['name']);
$type = $arrtype['extension'];

Переменная $type в качестве значения принимает расширение файла(без точки, напр. 3gp, swf и т.д.)
Итак, сначала идут видеофайлы
Мы просто создаём страницу(например video.php) в которую помещаем код:
define('_IN_JOHNCMS', 1);
$file = urldecode($_GET['file']);
$move = new ffmpeg_movie($file);
$frame = 150;
$getframe = $move->getFrame($frame);
if ($getframe)
{
$gd = $getframe->toGDImage();
header('Content-type: image/jpeg');
imagejpeg($gd);
}
else
echo 'Невозможно зделать скриншот';

Как видим адрес к файлу должен передаватся через GET параметр, который стоит закодировать с помощью urlencode(), а потом декодировать с помощью urldecode().
Теперь для вывода скриншота мы в view.php пишем код:
if($type == '3gp' || $type == 'mp4')
{
$file = $adrfile['adres'] . '/' . $adrfile['name'];
echo '<img src="video.php?file=' . urlencode($file) . '" alt="*" width="60px" height="60px"/><br/>';
}

Переменная $file в качестве значения должна принимать адрес к файлу с которого мы извлекаем скриншот.
Теперь темы под Нокиа: у view.php вставляем аналогичный код, как для видео скриншотера, но адрес скриншотера нужно указать новый. Сам скриншотер выглядит так:
define('_IN_JOHNCMS', 1);
require_once('../incfiles/class_pclzip.php');
$file = urldecode($_GET['file']);
$theme = new PclZip($file);
$content = $theme->extract(PCLZIP_OPT_BY_NAME,'theme_descriptor.xml',PCLZIP_OPT_EXTRACT_AS_STRING);
$content = $content[0]['content'];
$do = simplexml_load_string($content)->wallpaper['src'] or
$do = simplexml_load_string($content)->wallpaper['main_display_graphics'];
$resourse = $theme->extract(PCLZIP_OPT_BY_NAME,"$do",PCLZIP_OPT_EXTRACT_AS_STRING);
$resourse = $resourse[0]['content'];
header( "Content-type:image/jpeg" );
print $resourse;

Вывод скриншота осуществляется аналогично выводу скриншота для видео
Ну и наконец вывод скриншота для тем под СЕ(.thm)
Вод код скриншотера:
define('_IN_JOHNCMS', 1);
require('../incfiles/Tar.php');
$file = urldecode($_GET['file']);
$theme = $file;
$arr = & new Archive_Tar($theme);
$dfile = $arr -> extractInString('Theme.xml');
$puth = simplexml_load_string($dfile)-> Standby_image['Source'] or
simplexml_load_string($dfile)-> Desktop_image['Source'];
$string = $arr -> extractInString($puth);
header( "Content-type:image/jpeg" );
print $string;

Вывод осуществляется аналогично двум предыдущим, только нужно подключить клас Tar.php--в дистрибутиве его нет, поэтому скидываю его сюда в архиве. Архив нужно распаковать в папку /incfiles.
Работоспособность скриптов тестировалась на файлах .thm, .nth, .3gp, .mp4, как будет работать с остальными типами ХЗ.
И еще: эта статья может оказатся какимто жутким баяном, но мне абсолютно пох*й!!!
Прикрепленные файлы:
.
И еще коечто:
$adrfile['name'] -- это имя файла без его пути, например test.3gp
.
Хотя бы ктото один в теме насрал
.
¤
Z3RO (09.01.2011/21:13)
Хотя бы ктото один в теме насрал
что переживаешь, отпишутся кому нужно
.
♪♪♪ЗвЭрЪ ЙА♪♪♪
Z3RO (09.01.2011/21:13)
Хотя бы ктото один в теме насрал
пожайлусто--->>
молодец, хорошая статья
.
Vl@dimir (09.01.2011/22:42)
пожайлусто--->>
молодец, хорошая статья
Вугу, какашки
.
Автору советую почитать про оптимизацию, скриншоты надо сохранять на сервере, а не создавать их каждый раз на лету.
.
Krite (09.01.2011/23:38)
Автору советую почитать про оптимизацию, скриншоты надо сохранять на сервере, а не создавать их каждый раз на лету.
Както не подумал. Может когдато зделаю, оно хоть и тормозит скрипт, но очень слабо.
Всего: 8