Поворот загруженного изображения в соответствии с данными Exif и шириной / высотой - PullRequest
0 голосов
/ 08 апреля 2019

Я пытался собрать некоторый код вместе, но мой PHP не очень хорош.Я прочитал несколько подобных решений здесь, но я не могу заставить все это работать вместе.

Я пытаюсь взять загруженное изображение (с телефона), повернуть его в соответствии с данными exif,сохранить его на сервере.Затем используйте то же изображение, убедитесь, что оно в альбомной ориентации, и поверните его в портретную ориентацию.Затем масштабируйте до 1200 пикселей в ширину и 1800 пикселей в высоту.Затем сохраните в другую папку.

    <?php
    function image_fix_orientation($filename) {
    $exif = exif_read_data($filename);
    if (!empty($exif['Orientation'])) {
        $image = imagecreatefromjpeg($filename);
        switch ($exif['Orientation']) {
            case 3:
                $image = imagerotate($image, 180, 0);
                break;

            case 6:
                $image = imagerotate($image, 90, 0);
                break;

            case 8:
                $image = imagerotate($image, -90, 0);
                break;
        }

        imagejpeg($image, $filename, 90);
    }
}


    $currentDir = getcwd();
    $uploadDirectory = "/uploads/";
    $printDirectory = "/prints/";

    $errors = []; // Store all foreseen and unforseen errors here

    $fileExtensions = ['jpeg','jpg','png']; // Get all the file extensions

    $fileName = $_FILES['myfile']['name'];
    $fileSize = $_FILES['myfile']['size'];
    $fileTmpName  = $_FILES['myfile']['tmp_name'];
    $fileType = $_FILES['myfile']['type'];
    $fileExtension = strtolower(end(explode('.',$fileName)));

    $uploadPath = $currentDir . $uploadDirectory . basename($fileName);   
    $printPath = $currentDir . $uploadDirectory . $printDirectory . basename($fileName);   

    if (isset($_POST['submit'])) {

        $filename = $_FILES['myfile']['name'];
        $filePath = $_FILES['myfile']['tmp_name'];

        //get the image sizes
        $sizes = getimagesize($filePath);

        $width=$sizes[0];
        $height=$sizes[1];

        $source = imagecreatefromjpeg($filePath);
        $source = image_fix_orientation($source);
        // save a copy to the uploads folder for slideshow
    imagejpeg($source, $uploadPath, 90);

        if($width>$height){
            //rotate
            $image1 = imagescale($source, 1800, 1200);
            $image = imagerotate($image1, 90, 0);

            }else{
            //leave it
           $image = imagescale($source, 1200, 1800);
        }   

        //save in /uploads
        $didUpload = imagejpeg($image, $printPath, 100); 

            if ($didUpload) {


        echo "<h1>Thanks for your Photo!</h1><br>";
        echo "<p>Collect it from the printer.<p><br>";


            } else { echo "An error occurred somewhere. Try again or contact the admin"; }

} 

Я пытаюсь: - разрешить пользователю загружать изображение через html-форму - проверять ориентацию изображения с помощью exif, поворачивать при необходимости, чтобы оно отображалось в том виде, в котором оно было принято- сохранить копию на сервере - проверить, если ширина> высота, повернуть, если true - масштабировать до 1200px в ширину x 1800px в высоту - сохранить это изображение в другой папке.(это не работает, так как изображение не сохраняется)

...