cari

Rumah  >  Soal Jawab  >  teks badan

PHP mengeluarkan exif orientasi dari imej sahaja (tanpa menggunakan imagick)

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粉141925181P粉141925181271 hari yang lalu475

membalas semua(1)saya akan balas

  • P粉569205478

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

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

    balas
    0
  • Batalbalas