Привет, я работаю над сайтом php, где пользователь может использовать PHP для загрузки изображения, а затем система отобразит изображение с измененным размером (до меньшего размера). Коды изменения размера следующие:
<?php
ini_set('memory_limit', -1);
ini_set('max_execution_time', 40000);
require_once 'ThumbLib.inc.php';
$fileName = (isset($_GET['file'])) ? urldecode($_GET['file']) : null;
$thumb = PhpThumbFactory::create($fileName);
$thumb->Resize($_GET['width'], $_GET['height']);
$thumb->show();
?>
где html коды
<img src = "show_image.php?width=230&height=1000000&file=appsub/<?php echo $v["xfile"]; ?>">
Нет ничего плохого в том, что пользователь загружает изображение через ПК, но когда пользователь делает снимок с помощью смартфона (например, iPhone), иногда отображаемое изображение будет повернуто на 90 градусов.
Как я могу исправить проблему?
Фотография может иметь данные «ориентации», чтобы вы могли повернуть ее обратно в нормальное положение, если хотите. Вы можете использовать следующие коды сразу после того, как пользователь загрузил изображение:
Обратите внимание, что на вашем сервере должен быть установлен Imagick. (большинство новых серверов имеют)
<?php
function autoRotateImage($image) {
$orientation = $image->getImageOrientation();
switch($orientation) {
case imagick::ORIENTATION_BOTTOMRIGHT:
$image->rotateimage("#000", 180); // rotate 180 degrees
break;
case imagick::ORIENTATION_RIGHTTOP:
$image->rotateimage("#000", 90); // rotate 90 degrees CW
break;
case imagick::ORIENTATION_LEFTBOTTOM:
$image->rotateimage("#000", -90); // rotate 90 degrees CCW
break;
}
// Now that it's auto-rotated, make sure the EXIF data is correct in case the EXIF gets saved with the image!
$image->setImageOrientation(imagick::ORIENTATION_TOPLEFT);
}
?>
<?php
$image = new Imagick('./sourcepath/'.$upload1);
autoRotateImage($image);
// - Do other stuff to the image here -
$image->writeImage('./destinationpath/'. $upload1);
?>
если вы не сохраняете повернутое изображение, вы можете использовать следующее для его отображения (после поворота)
<?php
// File and rotation
$filename = 'test.jpg';
$degrees = 180;
// Content type
header('Content-type: image/jpeg');
// Load
$source = imagecreatefromjpeg($filename);
// Rotate
$rotate = imagerotate($source, $degrees, );
// Output
imagejpeg($rotate);
// Free the memory
imagedestroy($source);
imagedestroy($rotate);
?>