On a Symfony Commandline ContainerAwareCommand I want to emulate a file upload in order to call the following Method:
namespace AppUserBundle\Services;
use PcMagas\AppImageBundle\Filters\Crop\CropFilter;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Imagine\Image\ImageInterface;
use PcMagas\AppImageBundle\Filters\Resize\ResizeToLimitsKeepintAspectRatio;
use PcMagas\AppImageBundle\Filters\Resize\ResizeParams;
use PcMagas\AppImageBundle\Loader\ImageLoaderInterface;
use PcMagas\AppImageBundle\Saver\SaverInterface;
use Imagine\Image\Box;
class ProfileImageGenerator implements UploadedFileProcessor
{
const CROP_PARAMS='crop';
/**
* @var CropFilter
*/
private $crop=null;
/**
* @var ThumbnailFilterLoader
*/
private $thumbnail=null;
/**
* @var ResizeParams
*/
private $resizeParams=null;
/**
* @var ImageLoaderInterface
*/
private $imageLoader=null;
/**
* @var SaverInterface
*/
private $imageSaver=null;
public function __construct(CropFilter $crop,
ResizeToLimitsKeepintAspectRatio $thumbnail,
ImageLoaderInterface $imageLoader,
SaverInterface $imageSaver,
$thumbnailWidth,
$thumbnailHeight
){
$this->crop=$crop;
$this->thumbnail=$thumbnail;
$this->imageLoader=$imageLoader;
$this->imageSaver=$imageSaver;
if($thumbnailWidth>0 && $this->thumbnailHeight>0){
$this->resizeParams= new Box($thumbnailWidth,$thumbnailHeight);
}
}
/**
* {@inheritDoc}
* @see \AppUserBundle\Services\UploadedFileProcessor::process()
*/
public function process(UploadedFile $f, array $params)
{
$image=$this->openUploadedFileAsImageInterface($f);
//I implement in such a manner to provide extra prossessings over thumbnail image
if(isset($params[self::CROP_PARAMS])){
$image=$this->crop->apply($image, $params[self::CROP_PARAMS]);
}
if($this->resizeParams){
$image=$this->thumbnail->apply($image,$this->resizeParams);
}
return $this->generateFileFromImageInterface($image);
}
/**
* @param UploadedFile $f
* @return ImageInterface
*/
private function openUploadedFileAsImageInterface(UploadedFile $f)
{
return $this->imageLoader($f->getContents());
}
/**
* @param ImageInterface $image
* @return Symfony\Component\HttpFoundation\File
* @throws RuntimeException
*/
private function generateFileFromImageInterface(ImageInterface $image)
{
$tmpName=tempnam(sys_get_temp_dir()).'.png';
return $this->imageSaver->save($image);
}
}
Now I want to see how the method process
will behave so I created the following ContainerAwareCommand
In order to emulate a file upload:
namespace AppUserBundle\Command;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;
use AppUserBundle\Services\ProfileImageGenerator;
use PcMagas\AppImageBundle\Filters\Crop\CropParams;
class CreateProfileImageCommand extends ContainerAwareCommand
{
protected function configure()
{
$this->setName('appsuserbundle:create:profile:image')
->setDecrtiption("Process a file image like image profile.")
->setHelp("This command allows you to generate a file like a process image.")
->addArgument('file',InputArgument::REQUIRED,'The image file to process.');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$file=$input->getArgument('file');
/**
* @var AppUserBundle\Services\ProfileImageGenerator $container
*/
$imageGenerator=$this->getContainer()->getDefinition('app_user.thumbnail_generator');
$cropParams=new CropParams(5,5,10,10);
$file=null;//How To emulate an uploadedfile with realData?
$processedFile=$imageGenerator->process($file,[ProfileImageGenerator::CROP_PARAMS=>$cropParams])
}
}
But I am stuck on how to create an Uploadedfile from a filesystem image in order to see whether the image works do you have ansy somt of idea how to do that?