Generowanie miniaturek (skrypt automatycznie obraca zdjęcia)

0

Witam serdecznie,
Mam taki skrypt:

 
function upload_obrazka_miniaturka($file, $filetemp, $path, $newname, $wymiar) {
    if ($file != "") {
        if ($filetemp != "") {
            if (is_uploaded_file($filetemp)) {
                move_uploaded_file($filetemp, $path . "/" . $newname);

                //////////////////////////////////
                if (preg_match("/php/", $file) || preg_match("/Php/", $file) || preg_match("/PHp/", $file) || preg_match("/PHP/", $file) || preg_match("/pHP/", $file) || preg_match("/phP/", $file) || preg_match("/pHp/", $file)) {
                    unlink($path . "/" . $newname);
                    return "Błędny plik - Proszę wybrać inny";
                    exit();
                }
                $sizette = getimagesize($path . "/" . $newname);
                if ($sizette['mime'] != "image/jpeg" && $sizette['mime'] != "image/jpg" && $sizette['mime'] != "image/png") {
                    unlink($path . "/" . $newname);
                    return "Błędny plik - Proszę wybrać inny";
                    exit();
                }
                $rozm = filesize($path . "/" . $newname);
                if ($rozm > 500000000) {
                    unlink($path . "/" . $newname);
                    return "Plik za duży- Proszę wybrać inny";
                    exit();
                }
                //////////////////////////////////

                $file = strtolower($file);
                $nazwaobrazka = explode('.', $newname);

                //Przypisujemy do zmiennej $img_path ścieżke do obrazka
                $img_path = $path . "/" . $newname;

                //Tworzymy scieżkę do miniaturki
                $thumb_path = $path . "/mini_" . $nazwaobrazka['0'] . '.' . $nazwaobrazka['1'];

                //ustalamy maksymalny dopuszczalny rozmiar miniatury
                $max_width = $max_height = $wymiar;

                //Sprawdzamy czy obraz istnieje
                //if (!file_exists($img_path))
                //    die('Plik obrazu nie istnieje');
                //Pobieramy informacjie o obrazie
                $img_attr = getimagesize($img_path);

                //Sprawdzamy czy obraz jest wiekszy na szerokość czy na wysokość
                // i zmniejszamy odpowiednio rozmiar
                // $img_attr[0] - szerokosc, $img_attr[1] - wysokość
                if ($img_attr[0] > $img_attr[1]) {
                    $scale = $img_attr[0] / $max_width;
                } else {
                    $scale = $img_attr[1] / $max_height;
                }

                //Tworzymy obraz miniaturki
                $w = floor($img_attr[0] / $scale);
                $h = floor($img_attr[1] / $scale);
                $thumb = imagecreatetruecolor($w, $h);

                //Kopiujemy obraz pomniejszajac go,
                imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);

                if($nazwaobrazka['1'] == "jpg" || $nazwaobrazka['1'] == "jpeg"){
                //Kopiujemy obraz pomniejszajac go,
                imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);

                //Zapisujemy do pliku (jakość 75)
                imagejpeg($thumb, $thumb_path, 75);
                }
                
                if($nazwaobrazka['1'] == "png"){
                
				imagealphablending($thumb,false);
				$color=imagecolorallocatealpha($thumb,0,0,0,127);
				imagefill($thumb,0,0,$color);
				imagesavealpha($thumb,true);
                
                //Kopiujemy obraz pomniejszajac go,
                imagecopyresampled($thumb, imagecreatefrompng($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);

                //Zapisujemy do pliku (jakość 75)
                imagepng($thumb, $thumb_path, 7);
				}

                /////////////////
                $nazwaobrazka = explode('.', $newname);

                //Przypisujemy do zmiennej $img_path ścieżke do obrazka
                $img_path = $path . "/" . $newname;

                //Tworzymy scieżkę do miniaturki
                $thumb_path = $path . "" . $nazwaobrazka['0'] . '.' . $nazwaobrazka['1'];

                //ustalamy maksymalny dopuszczalny rozmiar miniatury
                $max_width = $max_height = 1024;

                //Sprawdzamy czy obraz istnieje
                //if (!file_exists($img_path))
                //    die('Plik obrazu nie istnieje');
                //Pobieramy informacjie o obrazie
                $img_attr = getimagesize($img_path);

                //Sprawdzamy czy obraz jest wiekszy na szerokość czy na wysokość
                // i zmniejszamy odpowiednio rozmiar
                // $img_attr[0] - szerokosc, $img_attr[1] - wysokość
                if ($img_attr[0] > $img_attr[1]) {
                    $scale = $img_attr[0] / $max_width;
                } else {
                    $scale = $img_attr[1] / $max_height;
                }

                //Tworzymy obraz miniaturki
                $w = floor($img_attr[0] / $scale);
                $h = floor($img_attr[1] / $scale);
                $thumb = imagecreatetruecolor($w, $h);

                if($nazwaobrazka['1'] == "jpg" || $nazwaobrazka['1'] == "jpeg"){
                //Kopiujemy obraz pomniejszajac go,
                imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);

                //Zapisujemy do pliku (jakość 75)
                imagejpeg($thumb, $thumb_path, 90);
                }
                
                
                
                if($nazwaobrazka['1'] == "png"){
                
                
				imagealphablending($thumb,false);
				$color=imagecolorallocatealpha($thumb,0,0,0,127);
				imagefill($thumb,0,0,$color);
				imagesavealpha($thumb,true);
                
                //Kopiujemy obraz pomniejszajac go,
                imagecopyresampled($thumb, imagecreatefrompng($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);

                //Zapisujemy do pliku (jakość 75)
                imagepng($thumb, $thumb_path, 7);
                
                }

                return $img_path;
            } else {
                echo"<center><b>Nie można dodać pliku!!</b> Błąd: " . $file . " </center> <br/>";
            }
        }
    }
}

Wszystko działa w nim poprawnie, jednak w przypadku niektórych zdjęć PIONOWYCH - automatycznie obraca je na POZIOME.

Wie ktoś może dlaczego?

1

Nie wglębiałem się w kod, ale wydaje mi się, że Twój program do przeglądania zdjęć Cię oszukuje - obraca zdjęcie przy wyświetlaniu, bo taką orientację ma zapisaną w danych nagłówkowych zdjęcia. Dlatego, przy tworzeniu miniatury przez skrypt, brana jest surowa orientacja zdjęcia (tak jak zostało zapisane) - która zazwyczaj jest pozioma.

Otwórz zdjęcie w jakimś edytorze (np. GIMP), to się dowiesz, czy zdjęcie jest automatycznie obracane ;)

0

Tak, masz rację!!!! Kurczę, na to nie wpadłem :/

Wiesz może jak dostosować powyższą funkcję żeby sprawdzał i wyświetlał "poprawnie" pionowo/poziomo te zdjęcia?

0

Musisz przetworzyć zarówno miniaturę jak i zdjęcie. Najlepiej najpierw zdjęcie przetwórz (i je zapisz) a potem z tych przetworzonych danych zrób miniaturę i zapisz ;)

Takie coś znalazłem: http://stackoverflow.com/questions/3657023/how-to-detect-shot-angle-of-photo-and-auto-rotate-for-website-display-like-desk

Może pomoże ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1