XE에서는 사용자가 등록하는 이미지와 같은 미디어 파일들을 제어하기위한 Media 패키지가 있습니다. Media 는 Intervention/image 에서 제공하는 기능을 이용하여 설정에서 정의된 내용에 의해 섬네일을 어떤 형태로 생성할지 결정하고 사이즈별로 생성해줍니다. 또한 이미지외에도 오디오, 비디오 파일들을 간편하게 표현해주기 위한 인터페이스를 제공합니다.
설정
미디어의 설정은 config/xe.php 파일의 media 항목에서 지정합니다.
섬네일 설정은 다음과 같이 작성되어있습니다.
기본으로 지정된 dummy 는 이미지추출 작업을 하지 않는 가상의 확장기능입니다. 비디오에서 이미지를 추출하도록 하고 싶다면 ffmpeg 로 변경하고 필요한 항목을 설정해야 합니다.
ffmpeg 를 사용하기 위해선 서버에 FFmpeg 가 설치되어있어야 합니다. 그리고 컴포저를 통해 다음 패키지가 설치되어야 합니다.
php-ffmpeg/php-ffmpeg ~0.5
비디오 확장기능은 현재 ffmpeg 만 지원합니다.
섬네일 생성
섬네일을 생성하기 위해서는 우선 File 객채를 미디어 객체로 변환해야 합니다. is메서드를 통해 특정파일이 미디어파일인지 확인하고, 미디어파일인 경우 섬네일을 생성하도록 합니다.
$thumbnails =XeMedia::images()->getThumbnails($media);// 특정 섬네일을 얻는 경우$thumbnail =XeMedia::images()->getThumbnail($media,'spill','S');
편집기능 특별하게 사용하기
XE 에서 제공하는 이미지 편집 기능중에 crop 기능이 있습니다. crop 은 가로, 세로 사이즈뿐만 아니라 좌표값이 필요한 기능이므로 기본적인 섬네일 생성방식에서 제외되어 있습니다. 이 기능을 사용하기 위해서는 아래와 같이 조금 특별하게 코드가 작성되어야 합니다.
useXeStorage;useXpressengine\Media\Commands\CropCommand;useXpressengine\Media\Coordinators\Position;useXpressengine\Media\Coordinators\Dimension;useXpressengine\Media\Thumbnailer;useApp\Http\Controllers\Controller;classUserControllerextendsController{publicfunctioneditImage($id) { $image =XeMedia::images()->find($id); $cropCmd =newCropCommand(); $cropCmd->setPosition(newPosition(50,100)); // 시작 좌표 설정 $cropCmd->setDimension(newDimension(300,200)); // 시작 좌표로 부터 가로, 세로 사이즈 지정 $thumbnailer =newThumbnailer(); $content = $thumbnailer->setOrigin($image->getContent())->addCommand($cropCmd)->generate();XeStorage::create($content,'path/to/dir','crop_file_name'); }
Thumbnailer 는 처리할 명령을 순서대로 입력받을 수 있습니다. 만약 crop 한 이미지를 letter 타입으로 크기를 변환하려고 한다면 다음과 같이 할 수 있습니다.