TYPO3: Scale and crop an image within a scheduler task

At work I needed to scale and crop an image from within a TYPO3 scheduler task. TYPO3 is very powerful at image manipulation, but getting access to those methods turned out to be a problem.

Image manipulation in plugins is pretty easy: Call $cObj->getImgResource() with some configuration parameters and you're done.

Cron job scripts in TYPO3 don't have the full TYPO3 environment available - since they often do not need it - just like eID scripts. $cObj is missing, and loading it was non-trivial:

/* @var $cObj tslib_cObj */
chdir(PATH_site);
if (!$GLOBALS['TSFE'] instanceof tslib_fe) {
    $GLOBALS['TSFE'] = t3lib_div::makeInstance(
        'tslib_fe', $GLOBALS['TYPO3_CONF_VARS'], 0, 0
    );
    $GLOBALS['TSFE']->config['config']['language'] = null;
    $GLOBALS['TSFE']->initTemplate();
}
if (!isset($GLOBALS['TT'])) {
    $GLOBALS['TT'] = t3lib_div::makeInstance('t3lib_TimeTrackNull');
}
$GLOBALS['TSFE']->tmpl->getFileName_backPath = PATH_site;
$cObj = t3lib_div::makeInstance('tslib_cObj');

Now that $cObj is available, we can crop and scale our image, and retrieve the path to it:

$arImageThumb = $cObj->getImgResource(
    $origImgPath,
    array(
        'width'  => '200c-50',
        'height' => '160c-50',
    )
);
$scaledImgPath = $arImageThumb[3];

This code scales the image down to exactly 200x160px, cropping everything off that's left over from top+bottom or left+right. The c-50 means centering and cropping from the mid of the image (centered, 50%).

Note that $origImgPath needs to be the path of the image relative to PATH_site, without a leading / - for example:

fileadmin/user_upload/foo.jpg

Other resources

Christian Opitz had the same solution 2 years earlier.

Written by Christian Weiske.

Comments? Please send an e-mail.