Я пытался собрать некоторый код вместе, но мой 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 в высоту - сохранить это изображение в другой папке.(это не работает, так как изображение не сохраняется)