Heim  >  Fragen und Antworten  >  Hauptteil

PHP entfernt Orientierungs-Exif nur aus dem Bild (ohne Verwendung von Imagick)

Ich habe ein Skript geschrieben, um die Größe hochgeladener Bilder lokal stapelweise zu ändern und Miniaturansichten zu erstellen. Das Problem besteht darin, dass einige Bilder vertikal ausgerichtet sind, sich aber nach der Größenänderung horizontal drehen.

Dies wird durch die Exif-Ausrichtung des Bildes verursacht. Gibt es eine einfache Möglichkeit, Orientierungs-Exifs über PHP aus einem Bild zu entfernen? Ich weiß, dass Imagick das kann, aber ich kann/will es nicht installieren.

Gibt es eine Lösung ohne?

Jetzt löse ich dieses Problem, indem ich ein solches Bild in einem Bildeditor öffne und es erneut speichere, ohne die Exif-Informationen beizubehalten. Wenn ich anschließend die Größe eines solchen Bildes im Skript ändere, ist das Ergebnis korrekt.

Also möchte ich einfach Exif aus dem Bild im PHP-Skript entfernen, bevor ich die Größe ändere.

Ich habe eine Funktion ausprobiert, die das Richtungs-Exif überprüft:

function removeExif($filename) {
    if (function_exists('exif_read_data')) {
      $exif = exif_read_data($filename);
      if($exif && isset($exif['Orientation'])) {
        $orientation = $exif['Orientation'];
        if($orientation != 1){

           // $img = new Imagick($filename);
           // $img->stripImage();
           // $img->writeImage($filename);

        } 
      } 
    } 
  }

Also muss ich nur den Imagick-Teil durch etwas anderes ersetzen, ohne zusätzliche Bibliotheken zu installieren, vielleicht mit dem bereits enthaltenen GD oder so.

P粉141925181P粉141925181180 Tage vor357

Antworte allen(1)Ich werde antworten

  • P粉569205478

    P粉5692054782024-03-28 00:52:35

    好吧,所以我决定旋转图像而不是删除 exif,结果具有相同的效果。因此,我检查 exif 方向值(如果有)是多少,然后根据该值,我只需使用 imagerotate,然后调整图像大小。结果是完美的,不需要额外的安装和库。

    function checkExif($filename) {
            if (function_exists('exif_read_data')) {
              $exif = exif_read_data($filename);
              if($exif && isset($exif['Orientation'])) {
                $orientation = $exif['Orientation'];
                if ($exif['Orientation']==3 OR $exif['Orientation']==6 OR $exif['Orientation']==8) {
                    $imageResource = imagecreatefromjpeg($filename); 
                    switch ($exif['Orientation']) { 
                    case 3:
                    $image = imagerotate($imageResource, 180, 0);
                    break;
                    case 6:
                    $image = imagerotate($imageResource, -90, 0);
                    break;
                    case 8:
                    $image = imagerotate($imageResource, 90, 0);
                    break;
                } 
                imagejpeg($image, $filename);
                imagedestroy($imageResource);
                imagedestroy($image);
                }
              } 
            } 
          }

    Antwort
    0
  • StornierenAntwort