File::processImage()
\nn\t3::File()->processImage($filenameOrSysFile = '', $processing = []);
Can be called directly after upload_copy_move().
Corrects the orientation of the image, which may have been saved in EXIF data.
Simply use the method \nn\t3::File()->process() for the maxWidth statement.
Instructions for $processing:
| correctOrientation => Correct rotation (e.g. because photo was uploaded from smartphone)
| @return string
Source Code
public function processImage($filenameOrSysFile = '', $processing = [])
{
if (is_string($filenameOrSysFile)) {
if ($falFile = \nn\t3::Fal()->getFalFile($filenameOrSysFile)) {
$filenameOrSysFile = $falFile;
}
}
// Bereits berechnete Bildgrößen löschen
\nn\t3::Fal()->clearCache($filenameOrSysFile);
if (is_string($filenameOrSysFile)) {
$filename = $filenameOrSysFile;
} else if (is_a($filenameOrSysFile, \TYPO3\CMS\Core\Resource\File::class)) {
$filename = $filenameOrSysFile->getPublicUrl();
}
if (!trim($filename)) return;
$pathSite = \nn\t3::Environment()->getPathSite();
$processing = \nn\t3::Arrays([
'correctOrientation' => true,
'maxWidth' => 6000,
'maxHeight' => 6000,
])->merge($processing);
$processingInstructions = [
'file' => $filename,
'file.' => [],
];
if ($maxWidth = $processing['maxWidth']) {
$processingInstructions['file.']['maxW'] = $maxWidth;
}
if ($maxHeight = $processing['maxHeight']) {
$processingInstructions['file.']['maxH'] = $maxHeight;
}
// EXIF-Daten vorhanden? Dann als JSON speichern, weil sie nach dem Processing verloren gehen würden.
if (is_object($filenameOrSysFile)) {
$uid = $filenameOrSysFile->getUid();
$exif = \nn\t3::Db()->findByUid('sys_file', $uid)['exif'] ?? [];
} else if ($exif = $this->getImageData($filename)) {
$exif = $this->extractExifData($filename);
}
// $exif['im'] enthält z.B. "-rotate 90" als ImageMagick Anweisung
if ($exif['im'] && $processing['correctOrientation']) {
$processingInstructions['file.']['params'] = $exif['im'];
}
$processedImageFilename = \nn\t3::Tsfe()->cObjGetSingle('IMG_RESOURCE', $processingInstructions);
if ($processedImageFilename) {
\TYPO3\CMS\Core\Utility\GeneralUtility::upload_copy_move($pathSite . $processedImageFilename, $pathSite . $filename);
}
$exif = array_merge($this->getData($filename), ['file' => $filename]);
// Update der Meta-Daten für das Bild
if (is_object($filenameOrSysFile)) {
\nn\t3::Fal()->updateMetaData($filenameOrSysFile);
}
return $exif;
}
Copied!