PHP mengeluarkan exif orientasi dari imej sahaja (tanpa menggunakan imagick)
P粉141925181
P粉141925181 2024-03-27 09:27:01
0
1
464

Saya menulis skrip untuk mengubah saiz imej yang dimuat naik secara berkumpulan dan membuat lakaran kecil. Masalahnya ialah jika sesetengah imej berorientasikan secara menegak tetapi selepas saiz semula ia berputar secara mendatar.

Ini disebabkan oleh orientasi exif imej. Adakah terdapat cara mudah untuk mengalih keluar exif orientasi daripada imej melalui PHP? Saya tahu Imagick boleh melakukannya, tetapi saya tidak boleh/tidak mahu memasangnya.

Adakah ada penyelesaian tanpanya?

Sekarang saya menyelesaikan masalah ini dengan membuka imej sedemikian dalam editor imej dan menyimpan semula tanpa mengekalkan maklumat exif. Selepas itu, apabila saya mengubah saiz imej sedemikian dalam skrip, hasilnya betul.

Jadi saya hanya mahu mengalih keluar exif daripada imej dalam skrip PHP sebelum mengubah saiz.

Saya mencuba fungsi yang menyemak exif arah:

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);

        } 
      } 
    } 
  }

Jadi saya hanya perlu menggantikan bahagian Imagic dengan sesuatu yang lain tanpa memasang sebarang perpustakaan tambahan, mungkin menggunakan GD yang sudah disertakan atau sesuatu.

P粉141925181
P粉141925181

membalas semua(1)
P粉569205478

Baiklah, jadi saya memutuskan untuk memutarkan imej dan bukannya mengalih keluar exif dan ia akhirnya mempunyai kesan yang sama. Jadi saya semak apakah nilai orientasi exif (jika ada) dan kemudian berdasarkan nilai itu saya hanya menggunakan imagerotate dan kemudian mengubah saiz imej. Hasilnya adalah sempurna dan tiada pemasangan dan perpustakaan tambahan diperlukan.

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);
            }
          } 
        } 
      }
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan