У меня есть форма для пользователя, чтобы загрузить изображение в галерею, в настоящий момент определенные изображения, сделанные на мобильном телефоне и планшете, отображаются с неправильной ориентацией.
Я пытаюсь прочитать EXIFДанные, чтобы исправить это, а затем создать эскиз.Я читаю примеры здесь и здесь , но ни один из них не продолжает корректировать изображение перед его сохранением на сервере, и я не могу понять, нужно ли мне его где-то сохранятьдо создания миниатюры.
Моя проверка подлинности скрипта работает правильно, убедившись, что файл имеет правильный формат, не существует и имеет размер менее 5 МБ.
Я установил мои переменные как;
$userimage = $_FILES["userimage"]["name"];
$filePath = $_FILES['userimage']['tmp_name'];
$filetype = $_FILES["userimage"]["type"];
$targetDir = "../public/img/uploads/";
$targetFilePath = $targetDir . $userimage;
$targetThumbFilePath = "../public/img/uploads/thumbs/";
$ext = pathinfo(strtolower($userimage), PATHINFO_EXTENSION);
Тогда это мой код для создания эскиза и загрузки;(Как только я исправлю эту проблему, я знаю, что имена файлов должны быть назначены мной).
$exif = exif_read_data($_FILES['userimage']['tmp_name']);
if (!empty($exif['Orientation'])) {
$image = imagecreatefromstring($filePath);
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;
default:
}
}
if (move_uploaded_file($image, $targetFilePath)){
$upload = '../public/img/uploads/' . $_FILES["userimage"]["name"];
list ($width, $height, $type) = getimagesize ($upload);
//switches content-type and calls the imagecreatefrom... function
if ($type == 1)
{
$image = imagecreatefromgif($upload);
}
elseif ($type == 2)
{
$image = imagecreatefromjpeg($upload);
}
elseif ($type == 3)
{
$image = imagecreatefrompng($upload);
}
$src = '../public/img/uploads/thumbs/thumb-' . $_FILES["userimage"]["name"];
// calculate thumbnail size
$new_width = 616;
$new_height = floor( $height * ( $new_width / $width ) );
// create a new temporary image
$tmp_img = imagecreatetruecolor($new_width, $new_height);
// copy and resize old image into new image
imagecopyresized( $tmp_img, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
//switches content-type and saves thumbnail
if ($type == 1)
{
imagegif($tmp_img, $src);
}
elseif ($type == 2)
{
imagejpeg($tmp_img, $src);
}
elseif ($type == 3)
{
imagepng($tmp_img, $src);
}
}