iPhones fotografieren standardmäßig in HEIC — etwa halb so groß wie ein vergleichbares JPEG — doch Chrome und Firefox können das Format nicht darstellen. Bis vor Kurzem lehnte Laravels Image-Komponente HEIC-Dateien ab, bevor sie den Treiber erreichten. Laravel 13.24 ändert das: HEIC, HEIF und AVIF werden als Eingabe akzeptiert, toHeic() ermöglicht die Ausgabe, und die image-Validierungsregel kennt alle drei Formate. Die Unterstützung stammt von @riasvdv (PR #60922).
Serverseitig erfordert HEIC-Dekodierung die Imagick-Erweiterung mit ImageMagicks HEIF-Delegate (auf Basis von libheif); GD kann HEIC grundsätzlich nicht lesen. Viele Distributionspakete liefern ImageMagick ohne diesen Delegate, daher prüfen: php -r "print_r(Imagick::queryFormats('HEI*'));" — ein leeres Array bedeutet, dass die Erweiterung die Dateien nicht verarbeiten kann. Unter Debian/Ubuntu steckt der Delegate in libheif1, die Homebrew-Formel imagemagick enthält ihn. AVIF ist unkomplizierter, da GD es dekodieren kann, wenn PHP gegen libavif gebaut wurde. Intervention Image (^4.0) bildet die Basis beider Treiber.
Die Validierung erfordert keine Konfiguration: Die image-Regel erkennt nun heic, heif und avif, sodass ein direkter iPhone-Upload dort besteht, wo er zuvor scheiterte. Auch die mimes-Regel (z. B. mimes:jpg,png,webp,heic) funktioniert; beide Regeln ermitteln den Typ aus dem Dateiinhalt statt aus dem browserseitigen MIME-Type, der bei HEIC zwischen image/heic, image/heif und anderen variiert.
Da Browser gespeicherte HEIC-Dateien nicht anzeigen, sollte die Konvertierung beim Upload erfolgen: $request->image('photo')->usingImagick()->orient()->scale(width: 2000)->toWebp()->quality(80)->store('photos'). usingImagick() ist nötig, weil der Standardtreiber GD an HEIC scheitert, und orient() wendet die Rotationsmetadaten an, die bei Handyfotos üblich sind. store() erzeugt einen gehashten Dateinamen mit korrekter Extension, sodass ein konvertierter Upload als photos/{hash}.webp landet.
Für AVIF mit WebP-Fallback verzweigt man von einer vorbereiteten Quelle — jede Transformation liefert eine neue Instanz, sodass kein Zustand überläuft —, speichert beide Varianten und lässt den Browser per <picture>-Element mit AVIF-<source> wählen. AVIF ist typischerweise 20–30 % kleiner als WebP bei vergleichbarer Qualität, kodiert aber langsamer; bei mehreren Größen empfiehlt sich ein Queued Job.
HEIC schreiben ist ebenfalls möglich, über toHeic() oder optimize('heic') — nützlich für Archive oder Exporte auf Apple-Geräte. Der Alias heif wird überall zu HEIC normalisiert: Dateien erhalten die kanonische Endung .heic, mimeType() meldet image/heic. Image::extension() bildet zudem die Aliase image/x-heic und image/x-avif korrekt ab.
Nicht unterstützte Formate lösen eine ImageException mit dem betreffenden Typ aus (z. B. "The image format [image/tiff] is not supported."). Dieselbe Exception erscheint, wenn HEIC auf ein Imagick-Build ohne HEIF-Delegate trifft — ein Deployment-Problem, das man beim Release prüfen sollte. Für Laravel-Versionen vor 13.24 verweist der Artikel auf eine separate Anleitung zur manuellen HEIC-zu-JPEG-Konvertierung in PHP.
Kommentare
Noch keine Kommentare — schreib den ersten.
Starte die Diskussion
Kein Konto, kein Passwort nötig — gib einfach deine E-Mail-Adresse ein, wir senden dir einen einmaligen Anmelde-Link. Beim ersten Mal bist du damit automatisch angemeldet.
Deine Bewertung wird nach der Anmeldung automatisch übernommen.
Schau in dein Postfach
Wir haben einen Anmelde-Link an … gesendet. Öffne ihn auf diesem Gerät — dieser Tab meldet dich automatisch an.
Nichts angekommen? Wirf einen Blick in den Spam-Ordner — und markiere die Mail dort als „Kein Spam“, dann landet sie künftig direkt im Postfach.