PHP read_exif_data和调整方向

如果方向关闭,我正在使用以下代码旋转上载的jpeg图像。从iPhone和Android上传的图像只有问题。

if(move_uploaded_file($_FILES['photo']['tmp_name'], $upload_path . $newfilename)){

chmod($upload_path . $newfilename, 0755);

$exif = exif_read_data($upload_path . $newfilename);

$ort = $exif['IFD0']['Orientation'];

switch($ort)

{

case 3: // 180 rotate left

$image->imagerotate($upload_path . $newfilename, 180, -1);

break;

case 6: // 90 rotate right

$image->imagerotate($upload_path . $newfilename, -90, -1);

break;

case 8: // 90 rotate left

$image->imagerotate($upload_path . $newfilename, 90, -1);

break;

}

imagejpeg($image, $upload_path . $newfilename, 100);

$success_message = 'Photo Successfully Uploaded';

}else{

$error_count++;

$error_message = 'Error: Upload Unsuccessful<br />Please Try Again';

}

我从jpeg读取EXIF数据的方式有问题吗?它没有像预期的那样旋转图像。

这是我运行var_dump($ exif)时发生的情况;

array(41) {

["FileName"]=> string(36) "126e7c0efcac2b76b3320e6187d03cfd.JPG"

["FileDateTime"]=> int(1316545667)

["FileSize"]=> int(1312472)

["FileType"]=> int(2)

["MimeType"]=> string(10) "image/jpeg"

["SectionsFound"]=> string(30) "ANY_TAG, IFD0, THUMBNAIL, EXIF"

["COMPUTED"]=> array(8) {

["html"]=> string(26) "width="2048" height="1536""

["Height"]=> int(1536)

["Width"]=> int(2048)

["IsColor"]=> int(1)

["ByteOrderMotorola"]=> int(1)

["ApertureFNumber"]=> string(5) "f/2.8"

["Thumbnail.FileType"]=> int(2)

["Thumbnail.MimeType"]=> string(10) "image/jpeg" }

["Make"]=> string(5) "Apple"

["Model"]=> string(10) "iPhone 3GS"

["Orientation"]=> int(6)

["XResolution"]=> string(4) "72/1"

["YResolution"]=> string(4) "72/1" ["ResolutionUnit"]=> int(2) ["Software"]=> string(5) "4.3.5" ["DateTime"]=> string(19) "2011:09:16 21:18:46" ["YCbCrPositioning"]=> int(1) ["Exif_IFD_Pointer"]=> int(194) ["THUMBNAIL"]=> array(6) { ["Compression"]=> int(6) ["XResolution"]=> string(4) "72/1" ["YResolution"]=> string(4) "72/1" ["ResolutionUnit"]=> int(2) ["JPEGInterchangeFormat"]=> int(658) ["JPEGInterchangeFormatLength"]=> int(8231) } ["ExposureTime"]=> string(4) "1/15" ["FNumber"]=> string(4) "14/5" ["ExposureProgram"]=> int(2) ["ISOSpeedRatings"]=> int(200) ["ExifVersion"]=> string(4) "0221" ["DateTimeOriginal"]=> string(19) "2011:09:16 21:18:46" ["DateTimeDigitized"]=> string(19) "2011:09:16 21:18:46" ["ComponentsConfiguration"]=> string(4) "" ["ShutterSpeedValue"]=> string(8) "3711/949" ["ApertureValue"]=> string(9) "4281/1441" ["MeteringMode"]=> int(1) ["Flash"]=> int(32) ["FocalLength"]=> string(5) "77/20" ["SubjectLocation"]=> array(4) { [0]=> int(1023) [1]=> int(767) [2]=> int(614) [3]=> int(614) } ["FlashPixVersion"]=> string(4) "0100" ["ColorSpace"]=> int(1) ["ExifImageWidth"]=> int(2048) ["ExifImageLength"]=> int(1536) ["SensingMethod"]=> int(2) ["ExposureMode"]=> int(0) ["WhiteBalance"]=> int(0) ["SceneCaptureType"]=> int(0) ["Sharpness"]=> int(1) }

回答:

imagerotate文档为第一个参数引用的类型与您使用的类型不同:

由图像创建功能之一(例如imagecreatetruecolor())返回的图像资源。

这是使用此功能的一个小例子:

function resample($jpgFile, $thumbFile, $width, $orientation) {

// Get new dimensions

list($width_orig, $height_orig) = getimagesize($jpgFile);

$height = (int) (($width / $width_orig) * $height_orig);

// Resample

$image_p = imagecreatetruecolor($width, $height);

$image = imagecreatefromjpeg($jpgFile);

imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);

// Fix Orientation

switch($orientation) {

case 3:

$image_p = imagerotate($image_p, 180, 0);

break;

case 6:

$image_p = imagerotate($image_p, -90, 0);

break;

case 8:

$image_p = imagerotate($image_p, 90, 0);

break;

}

// Output

imagejpeg($image_p, $thumbFile, 90);

}

以上是 PHP read_exif_data和调整方向 的全部内容, 来源链接: utcz.com/qa/400145.html

回到顶部