Changelog 

Unreleased 

  • Fixed: processed image requests no longer return HTTP 400 when fileadmin (or any other Local FAL storage) is a symlink to an external location such as an NFS/EFS mount. isPathWithinAllowedRoots now accepts any realpath-resolved path that lies within the TYPO3 public root or the realpath of any configured Local storage's basePath. Symlinks placed inside a storage that escape every allowed root -- e.g. fileadmin/evil -> /etc -- continue to be rejected. Reported in issue #70.
  • Hardened: paths containing NUL bytes are rejected outright, closing a minor realpath-bypass via the not-yet-existing-path parent-walk branch.
  • Changed (BC for subclasses and manual instantiators): Netresearch\\NrImageOptimize\\Processor gains a new required StorageRepository constructor parameter. Consumers that autowire the service (the default in TYPO3 12+) are unaffected; any code that extends the class or constructs it by hand must forward the new dependency.
  • Added OptimizeOnUploadListener -- PSR-14 listener that runs optipng / gifsicle / jpegoptim on AfterFileAddedEvent and AfterFileReplacedEvent. Keyed by storageUid . ':' . identifier to avoid cross-storage re-entrancy collisions; restores setEvaluatePermissions in a finally block.
  • Added nr:image:optimize -- bulk optimization command with --dry-run, --storages, --jpeg-quality, and --strip-metadata options. Uses a streaming Generator over sys_file so large installations don't load the full index into memory.
  • Added nr:image:analyze -- heuristic analysis command that estimates optimization potential without invoking any binary. Fast even on large installations.
  • Added ImageOptimizer service -- shared backend used by the listener and both CLI commands. Env overrides (OPTIPNG_BIN, GIFSICLE_BIN, JPEGOPTIM_BIN) are authoritative: a set-but-invalid override is reported as unavailable rather than silently falling back to $PATH. $PATH lookups also verify is_executable().

2.2.1 

  • Adjusted author information in ext_emconf.php.

2.2.0 

  • Fixed: always render alt attribute on generated <img> tags.
  • Expanded unit test coverage for Processor and SourceSetViewHelper.

2.1.0 

New in version 2.1.0

Width-based responsive srcset with sizes attribute, configurable width variants, and fetchpriority support.

  • Added responsive width-based srcset generation as opt-in feature.
  • Added widthVariants parameter for custom breakpoints.
  • Added sizes parameter for responsive image sizing.
  • Added fetchpriority attribute for resource hints.
  • Optimized default sizes attribute values.

2.0.1 

  • Fixed declare statement issue preventing TER publishing via GitHub Actions.

2.0.0 

New in version 2.0.0

TYPO3 13 compatibility with PHP 8.2--8.4 support.

  • Added TYPO3 13 compatibility.
  • Added PHP 8.2, 8.3, and 8.4 support.
  • Dropped support for older TYPO3 versions.
  • Switched to Intervention Image 3.x.
  • Removed obsolete system binary checks.

1.0.1 

  • Added ext_emconf.php for classic installation.

1.0.0 

  • Initial stable release.
  • GitHub Actions CI workflows.

0.1.5 

  • Fixed strtolower() null argument error.
  • Fixed array offset access on boolean value.
  • Allowed numeric characters in file extensions.
  • Added extension icon.
  • Corrected crop variant examples.
  • Improved lazy loading behavior.