Adding new derivative image size

Hi,

I am editing config/local.config.php and would like to add an extra derivative image size to the existing thumbnail profiles, so it would look like this:

'thumbnails' => [
        'types' => [
            'large' => ['constraint' => 800],
            'medium-large' => ['constraint' => 450],
            'medium' => ['constraint' => 200],
            'square' => ['constraint' => 200],
        ],
        'thumbnailer_options' => [
            'imagemagick_dir' => null,
        ],
    ],

When I do this, however, I get a PHP error when adding a new image:


**TypeError**
Argument 3 passed to Omeka\File\Thumbnailer\ImageMagick::create() must be of the type array, null given, called in /var/www/html/omeka-s/application/src/File/TempFile.php on line 267

Details:

TypeError: Argument 3 passed to Omeka\File\Thumbnailer\ImageMagick::create() must be of the type array, null given, called in /var/www/html/omeka-s/application/src/File/TempFile.php on line 267 and defined in /var/www/html/omeka-s/application/src/File/Thumbnailer/ImageMagick.php:45 Stack trace: #0 /var/www/html/omeka-s/application/src/File/TempFile.php(267): Omeka\File\Thumbnailer\ImageMagick->create(NULL, 800, NULL) #1 /var/www/html/omeka-s/application/src/File/TempFile.php(438): Omeka\File\TempFile->storeThumbnails() #2 /var/www/html/omeka-s/application/src/Media/Ingester/Upload.php(62): Omeka\File\TempFile->mediaIngestFile(Object(Omeka\Entity\Media), Object(Omeka\Api\Request), Object(Omeka\Stdlib\ErrorStore)) #3 /var/www/html/omeka-s/application/src/Api/Adapter/MediaAdapter.php(145): Omeka\Media\Ingester\Upload->ingest(Object(Omeka\Entity\Media), Object(Omeka\Api\Request), Object(Omeka\Stdlib\ErrorStore)) #4 /var/www/html/omeka-s/application/src/Api/Adapter/AbstractEntityAdapter.php(548): Omeka\Api\Adapter\MediaAdapter->hydrate(Object(Omeka\Api\Request), Object(Omeka\Entity\Media), Object(Omeka\Stdlib\ErrorStore)) #5 /var/www/html/omeka-s/application/src/Api/Adapter/ItemAdapter.php(190): Omeka\Api\Adapter\AbstractEntityAdapter->hydrateEntity(Object(Omeka\Api\Request), Object(Omeka\Entity\Media), Object(Omeka\Stdlib\ErrorStore)) #6 /var/www/html/omeka-s/application/src/Api/Adapter/AbstractEntityAdapter.php(548): Omeka\Api\Adapter\ItemAdapter->hydrate(Object(Omeka\Api\Request), Object(Omeka\Entity\Item), Object(Omeka\Stdlib\ErrorStore)) #7 /var/www/html/omeka-s/application/src/Api/Adapter/AbstractEntityAdapter.php(367): Omeka\Api\Adapter\AbstractEntityAdapter->hydrateEntity(Object(Omeka\Api\Request), Object(Omeka\Entity\Item), Object(Omeka\Stdlib\ErrorStore)) #8 /var/www/html/omeka-s/application/src/Api/Manager.php(233): Omeka\Api\Adapter\AbstractEntityAdapter->update(Object(Omeka\Api\Request)) #9 /var/www/html/omeka-s/application/src/Api/Manager.php(136): Omeka\Api\Manager->execute(Object(Omeka\Api\Request)) #10 /var/www/html/omeka-s/application/src/Mvc/Controller/Plugin/Api.php(152): Omeka\Api\Manager->update('items', '2772', Array, Array, Array) #11 /var/www/html/omeka-s/application/src/Controller/Admin/ItemController.php(243): Omeka\Mvc\Controller\Plugin\Api->update('items', '2772', Array, Array) #12 /var/www/html/omeka-s/vendor/zendframework/zend-mvc/src/Controller/AbstractActionController.php(78): Omeka\Controller\Admin\ItemController->editAction() #13 /var/www/html/omeka-s/vendor/zendframework/zend-eventmanager/src/EventManager.php(322): Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(Zend\Mvc\MvcEvent)) #14 /var/www/html/omeka-s/vendor/zendframework/zend-eventmanager/src/EventManager.php(179): Zend\EventManager\EventManager->triggerListeners(Object(Zend\Mvc\MvcEvent), Object(Closure)) #15 /var/www/html/omeka-s/vendor/zendframework/zend-mvc/src/Controller/AbstractController.php(106): Zend\EventManager\EventManager->triggerEventUntil(Object(Closure), Object(Zend\Mvc\MvcEvent)) #16 /var/www/html/omeka-s/vendor/zendframework/zend-mvc/src/DispatchListener.php(138): Zend\Mvc\Controller\AbstractController->dispatch(Object(Zend\Http\PhpEnvironment\Request), Object(Zend\Http\PhpEnvironment\Response)) #17 /var/www/html/omeka-s/vendor/zendframework/zend-eventmanager/src/EventManager.php(322): Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent)) #18 /var/www/html/omeka-s/vendor/zendframework/zend-eventmanager/src/EventManager.php(179): Zend\EventManager\EventManager->triggerListeners(Object(Zend\Mvc\MvcEvent), Object(Closure)) #19 /var/www/html/omeka-s/vendor/zendframework/zend-mvc/src/Application.php(332): Zend\EventManager\EventManager->triggerEventUntil(Object(Closure), Object(Zend\Mvc\MvcEvent)) #20 /var/www/html/omeka-s/index.php(21): Zend\Mvc\Application->run() #21 {main}

It looks like I have to change something elsewhere to get this desired functionality - does anyone know what needs to be added to which file, please?

Many thanks in advance
Alexander

I think it will work if you add an empty “options” array to your medium-large array, like so:

'medium-large' => ['constraint' => 450, 'options' => []],
2 Likes

Thanks very much @jimsafley!

That worked great :slight_smile:

I can confirm that adding the new option means that an extra derivative gets created at the specified size and the new option size also appears in the media embed block when adding an image to the page - result! For other folks benefit, here is the final code:

'thumbnails' => [
        'types' => [
            'large' => ['constraint' => 800],
            'medium-large' => ['constraint' => 450, 'options' => []],
            'medium' => ['constraint' => 200],
            'square' => ['constraint' => 200],
        ],
        'thumbnailer_options' => [
            'imagemagick_dir' => null,
        ],
    ],

Best wishes
Alexander

2 Likes

This topic was automatically closed 250 days after the last reply. New replies are no longer allowed.