由於使用者使用平板、手機上傳後,常常會有圖片不是正擺的問題。
這邊我用PHP來處理這個問題(前端也可以用JS來解決旋轉的文題,不過這邊就不多贅述)
主要核心是以下兩個 function
exif_read_data // 用於讀取 exif 資訊imagerotate // 旋轉圖片
下面是我實作的方式,首先你需要有一張圖片,接著:
- 讀取
- 旋轉
- 寫入
// 旋轉圖片
function rotateImage($path)
{
$exif = exif_read_data($path);
$extension = strtolower(pathinfo($path, PATHINFO_EXTENSION));
if (isset($exif['Orientation'])) {
switch($exif['Orientation']) {
case 3:
$rotateAngle = 180;
break;
case 6:
$rotateAngle = -90;
break;
case 8:
$rotateAngle = 90;
break;
default:
$rotateAngle = 0;
break;
}
if (in_array($extension, ['jpg', 'jpeg', 'png', 'bmp'])) {
$source = $this->createImageFromPath($path, $extension);
$rotatedImage = imagerotate($source, $rotateAngle, 0);
$this->saveImageByImageExtenstion($rotatedImage, $path, $extension);
}
} // 讀取圖片
function createImageFromPath($path, $extension)
{
$extension = strtolower(pathinfo($path, PATHINFO_EXTENSION));
$image = null;
switch ($extension) {
case 'jpg':
case 'jpeg':
$image = imagecreatefromjpeg($path);
break;
case 'png':
$image = imagecreatefrompng($path);
break;
case 'bmp':
$image = imagecreatefrombmp($path);
break;
}
return $image;
}// 儲存圖片
function saveImageByImageExtenstion($image, $path, $extension)
{
switch ($extension) {
case ‘jpg’:
case ‘jpeg’:
imagejpeg($image, $path, 100);
break;
case ‘png’:
imagepng($image, $path);
break;
case ‘bmp’:
imagewbmp($image, $path);
break;
}
}