Исходный код
$mov = new ffmpeg_movie ( '1.avi' );
$frame = $mov -> GetFrame ( 26 ):
$gd = ToGd ( $frame );
header ( "Content-type: image/gif" );
imageGif ( $gd );
function ToGd ( $frame )
{
RETURN $frame -> toGDimage ();
}
Что не так в исходном коде
Казалось бы, вот есть отдельная маленькая функция, всё как я люблю.
Однако здесь функция не прячет никакого знания, намерение полностью совпадает с реализацией. Сейчас описание функции звучит так: «Чтобы получить картинку из кадра, нужно вызвать метод получения картинки из кадра». Другими словами, здесь метод превращён в функцию с дргуим названием, который делает то же самое.
В правильном методе реализация отличается от намерения: «Чтобы подсветить фрагмент текста, нужно вывести его в инверсном цвете».
Как можно улучшить исходный код
Если в таком коротком коде хочется что-то спрятать, то более достойный кандидато на это — алгоритм получения кадра из ролика. По сути исходный код реализует две вещи: получает кадр в виде картинки и отдаёт её веб-клиенту. Вот первую реализацию как раз и стоит убрать.
function GetFrame( $video, $frame_number ) {
$mov = newffmpeg_movie ( '1.avi' );
$frame = $mov -> GetFrame ( 26 ):
$gd = $frame -> toGDimage ();
return $gd;
}
header ( "Content-type: image/gif" );
GetFrame ( '1.avi', 26 );