fulgurio/image-handler-bundle

This package is abandoned and no longer maintained. No replacement package was suggested.

Symfony FulgurioImageHandlerBundle

Installs: 25

Dependents: 0

Suggesters: 0

Security: 0

Stars: 1

Watchers: 1

Forks: 0

Open Issues: 0

Type:symfony-bundle

dev-test 2016-01-30 13:58 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:36:06 UTC


README

Image handler bundle use the very helpful Vich uploader bundle, which allows file upload with annotations.

In the same way, Image handler adds in this bundle a way to handle uploaded picture, like resizing or cropping.

Here is an example of use, with the table field "avatar"

First, add the namespace for annotations :

use Vich\UploaderBundle\Mapping\Annotation as Vich;
use Fulgurio\ImageHandlerBundle\Annotation as ImageAnnotation;

Configure your entity class as explain in Vich Uploader :

/**
[...]
 *         @Vich\Uploadable
 */

Add a new class member, avatarFile

    /**
     * @var Symfony\Component\HttpFoundation\File\UploadedFile
     * @Vich\UploadableField(mapping="avatar_image" fileNameProperty="avatar")
     * @Assert\File(
     *     maxSize="1M",
     *     mimeTypes={"image/png", "image/jpeg", "image/pjpeg"}
     * )
     */
    private $avatarFile;

As you'll see, avatarFile is associated to avatar with fileNameProperty

We update the setAvarFile method avatar member, because if entity has no change, file will not be uploaded as well. So we "fake" a change by update ''avatar'' member.

    /**
     * Set avatarFile
     *
     * @param \Symfony\Component\HttpFoundation\File\UploadedFile $avatarFile
     */
    public function setAvatarFile(UploadedFile $avatarFile)
    {
        $this->avatarFile = $avatarFile;
        // Because we need an update of User object when form submit a file,
        // we make a fake update of $avatar
        if ($avatarFile)
        {
            $this->setAvatar(time());
        }
        return $this;
    }

At the end, you need to add image handler annotation to original field, avatar :

    /**
     * @ORM\Column(type="string", length=128, nullable=true)
     *
     * @ImageAnnotation\ImageHandle(mapping="avatar_image", action="resize", width=100, height=100)
     */
    private $avatar;

If you want to crop the picture, just replace the action by "crop", and change width of heigth as wanted. You can type 3 fields for each function :

  • width (optional): width to resize / crop
  • height (optional): height to resize / crop
  • mappping (optional): name of config mapping, to set width and height in global config. See above
  • action (optional): by default, you'll resize the picture, but "crop" is also available

In app/config/config.yml, just type something like that :

fulgurio_image_handler:
    mappings:
        avatar_image:
            width: 400
            height: 400
        second_size:
            width: 200
            height: 200
            action: crop

With Vich/UploadBundle, you need to config a mapping name. In my case, it's in @Vich\UploadableField(mapping="avatar_image" fileNameProperty="avatar"). If you put in you config file a fulgurio_image_handler.mappings.avatar_image, it will use this settings, so picture will be resize to 400x400. But if you add a mapping settings in ImageHandler annotatin, like @ImageAnnotation\ImageResize(mapping="second_size") ImageHandler will crop to 200x200. Groovy !