- 贴心猫(Imcat)
- 贴心代码
- 详情
PHP 中 Orientation 属性判断上传图片是否需要旋转
发布:2016-01-18 12:13
点击1231次
评论:0条
http://www.poluoluo.com/jzxy/201510/429151.html
PHP 中 Orientation 属性判断上传图片是否需要旋转
当使用苹果的iOS系统拍照上传图片的时候,可能会遇到图片被旋转的问题,这主要是取决于你拍照时拍照按钮的位置。
假设拍照时你把手机旋转过来底部朝上,那拍出来的照片也是被旋转了的。
下面的代码将确保所有上传的照片在上传时都能是正确定向:
<?php
$image = imagecreatefromstring(file_get_contents($_FILES['image_upload']['tmp_name']));
$exif = exif_read_data($_FILES['image_upload']['tmp_name']);
if(!empty($exif['Orientation'])) {
switch($exif['Orientation']) {
case 8:
$image = imagerotate($image,90,0);
break;
case 3:
$image = imagerotate($image,180,0);
break;
case 6:
$image = imagerotate($image,-90,0);
break;
}
}
// $image now contains a resource with the image oriented correctly
?>
经测试,Android拍照的 Orientation 属性都是1,判断不出是否被旋转了。
====================================================================
用WINDOW 10,上傳圖片時的方向會錯了
上傳後的方向錯了:
網上找了很久:
因手機拍照時,手機會把照片的方向寫入照片,而舊的WINDOW (WINDOW10以下)
看相片時不會自動依照片拍攝時方向顯示出來,所以手機拍照時在WINDOW10以下看時方向會橫向了
但WINDOW 10 之後,WINDOW10 會自動讀取照片拍照時的方向,所以在WINDOW 10 看照片時,照片是依拍照時的方向
但上傳圖片時,08CMS的程序不會自動讀取照片拍照時的方向,所以方向全錯了
但發覺其他網站沒有這問題.
原來現在的數碼照片會把拍照時的方向寫在相片中,在PHP中可用EXIF的功能把拍照時的方向拿出來,
上傳照片時在程序中自動把圖片改正, 現在有上傳圖片功能的網站也會支持這功能的, 但08CMS的沒有這功能
有鑑於目前市面上的相機已經開始支援 EXIF 轉向標籤 (EXIF Orientation tag)
也就是在拍照者持相機直拍時,於 EXIF 寫入一個識別用的值
且部份圖形處理軟體亦已支援該標籤
因此站方亦將上傳相片部份變更為支援此一功能,
讓會員無須事先將相機中的直拍照片一張一張慢慢手動轉正,
而能夠更輕鬆方便地直接上傳支援該標籤的圖片喔
此部份變更適用所有的上傳,包括網頁上傳、壓縮檔上傳、XP 上傳精靈,以及 LazyFox
若會員有需求將相片以圖形處理軟體轉正之後,再進行後製(如加框)時
需一併使用 EXIF 編輯工具(例如 Quick EXIF editor)
將 EXIF 中的 "Orientation" 標籤設為 1
否則上傳後可能會因為 EXIF 的該標籤未經修改,
而發生照片再度被轉為錯誤方向的問題