Wie kann ich hochgeladene Bilder basierend auf der EXIF-Ausrichtung mithilfe von PHP richtig drehen?

Susan Sarandon
Freigeben: 2024-10-31 14:28:02
Original
796 Leute haben es durchsucht

How to Correctly Rotate Uploaded Images Based on EXIF Orientation using PHP?

PHP read_exif_data und Ausrichtung anpassen

Wenn Sie exif_read_data verwenden, um hochgeladene JPEG-Bilder basierend auf ihrer Ausrichtung zu drehen, ist es wichtig, die Daten richtig zu interpretieren. Im bereitgestellten Code wird die Ausrichtung gelesen, aber nicht genau angewendet.

EXIF-Daten lesen

Die EXIF-Daten werden mit exif_read_data($upload_path . $newfilename) extrahiert, das ein Array mit zurückgibt diverse Metadaten. Die Taste „Ausrichtung“ enthält den Wert, der die Ausrichtung des Bildes angibt.

Ausrichtung anpassen

Um die Drehung zu korrigieren, verwenden Sie die folgende Switch-Anweisung entsprechend dem Wert „Ausrichtung“:

<code class="php">switch($ort)
{
    case 3: // Rotate 180 degrees left
        $image->imagerotate($upload_path . $newfilename, 180, -1);
        break;

    case 6: // Rotate 90 degrees right
        $image->imagerotate($upload_path . $newfilename, -90, -1);
        break;

    case 8: // Rotate 90 degrees left
        $image->imagerotate($upload_path . $newfilename, 90, -1);
        break;
}</code>
Nach dem Login kopieren

Alternativ können Sie diese optimierten Funktionen zur Ausrichtungsanpassung in Betracht ziehen:

GD-Funktion

Diese Funktion dreht das Bild ohne Resampling:

<code class="php">function image_fix_orientation(&$image, $filename) {
    $exif = exif_read_data($filename);

    if (!empty($exif['Orientation'])) {
        switch ($exif['Orientation']) {
            case 3:
                $image = imagerotate($image, 180, 0);
                break;
            
            case 6:
                $image = imagerotate($image, 90, 0);
                break;
            
            case 8:
                $image = imagerotate($image, -90, 0);
                break;
        }
    }
}</code>
Nach dem Login kopieren

Einzeilige GD-Version

<code class="php">function image_fix_orientation(&$image, $filename) {
    $image = imagerotate($image, array_values([0, 0, 0, 180, 0, 0, -90, 0, 90])[@exif_read_data($filename)['Orientation'] ?: 0], 0);
}</code>
Nach dem Login kopieren

ImageMagick-Funktion

Diese Funktion verwaltet die Bildausrichtung in ImageMagick:

<code class="php">function image_fix_orientation($image) {
    if (method_exists($image, 'getImageProperty')) {
        $orientation = $image->getImageProperty('exif:Orientation');
    } else {
        $filename = $image->getImageFilename();

        if (empty($filename)) {
            $filename = 'data://image/jpeg;base64,' . base64_encode($image->getImageBlob());
        }

        $exif = exif_read_data($filename);
        $orientation = isset($exif['Orientation']) ? $exif['Orientation'] : null;
    }

    if (!empty($orientation)) {
        switch ($orientation) {
            case 3:
                $image->rotateImage('#000000', 180);
                break;

            case 6:
                $image->rotateImage('#000000', 90);
                break;

            case 8:
                $image->rotateImage('#000000', -90);
                break;
        }
    }
}</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich hochgeladene Bilder basierend auf der EXIF-Ausrichtung mithilfe von PHP richtig drehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage