2012-11-26 17 views
12

Jak mogę uzyskać orientację obrazu (poziomą lub pionową) obrazu (JPEG lub PNG) w PHP?Odzyskaj orientację obrazu w PHP

Stworzyłem witrynę php, w której użytkownicy mogą przesyłać zdjęcia. Zanim skalę je do mniejszego rozmiaru, chcę wiedzieć, w jaki sposób obraz jest zorientowany, aby odpowiednio skalować.

Dzięki za odpowiedź!

+1

http://php.net /manual/en/imagick.getimageorientation.php –

+0

to nie jest część specyfikacji jpg/png. to tylko siatki pikseli. możesz sprawdzić, czy obraz jest szerszy niż wyższy, ale to nie znaczy zbyt wiele. Dane EXIF ​​zawierają dane orientacyjne. –

Odpowiedz

29

Zawsze odbywa się to:

list($width, $height) = getimagesize('image.jpg'); 
if ($width > $height) { 
    // Landscape 
} else { 
    // Portrait or Square 
} 
0

Prosty. Wystarczy sprawdzić szerokość i wysokość i porównać je, aby uzyskać orientację. Następnie odpowiednio zmień rozmiar. Prosto do przodu naprawdę. Jeśli staramy się utrzymać proporcje, ale pasuje do jakiegoś kwadracie można użyć mniej więcej tak:

public static function fit_box($box = 200, $x = 100, $y = 100) 
{ 
    $scale = min($box/$x, $box/$y, 1); 
    return array(round($x * $scale, 0), round($y * $scale, 0)); 
} 
1

Przypuszczam, że można sprawdzić czy szerokość obrazu jest dłuższa niż długość dla krajobrazu i dla portret, jeżeli Długość jest większa niż szerokość.

Możesz to zrobić za pomocą prostego oświadczenia IF/ELSE.

Można również skorzystać z funkcji: Imagick::getImageOrientation

http://php.net/manual/en/imagick.getimageorientation.php

0

używam uogólniony algorytm skalowania w dół niczym. ..

function calculateSize($width, $height){ 

      if($width <= maxSize && $height <= maxSize){ 
       $ratio = 1; 
      } else if ($width > maxSize){ 
       $ratio = maxSize/$width; 
       } else{ 
        $ratio = maxSize/$height; 
        } 

     $thumbwidth = ($width * $ratio); 
     $thumbheight = ($height * $ratio); 
     } 

Tutaj maksymalny rozmiar to ten, który zainicjowałem na poziomie 120px dla wysokości i szerokości. . . aby miniatura nie przekroczyła tego rozmiaru. . ..

Działa to dla mnie co jest niezależnie od orientacji pionowej lub poziomej i mogą być stosowane ogólnie

6
list($width, $height) = getimagesize("path/to/your/image.jpg"); 

if($width > $height) 
    $orientation = "landscape"; 
else 
    $orientation = "portrait";