苹果 php上传图片,thinkphp5 上传图片 iPhone 设备 图片旋转问题处理

前台代码html>

test

上传

后台代码

//获取文件类型 - 扩展名

private function getType($filename){

$temp_arr = explode(".", $filename);

$file_ext = array_pop($temp_arr);

$file_ext = trim($file_ext);

$file_ext = strtolower($file_ext);

return $file_ext;

}

//获取上传设备信息 - 如果非iphone,ipad苹果设备 返回 0

private function getFileVer($user_agent){

$ua = strtolower($user_agent);

if(strpos($ua,"iphone") || strpos($ua,"ipad") || strpos($ua,"ipod") || strpos($ua,"ios")){

$verArr = explode('cpu iphone os',$ua);

$verArr2 = explode('like mac os',$verArr[1]);

$ver = trim($verArr2[0]);

$ver = str_replace("_","",$ver);

$ver = intval($ver);

if(strlen($ver)<7) {

$ver = $ver*pow(10,(7-strlen($ver)));

}

return $ver;

}else{

return 0;

}

}

//图片格式转换

private function transform_image($image_path, $to_ext = 'png', $save_path = null)

{

if (! in_array($to_ext, ['png', 'gif', 'jpeg', 'wbmp', 'webp', 'xbm'])) {

throw new \Exception('unsupport transform image to ' . $to_ext);

}

switch (exif_imagetype($image_path)) {

case IMAGETYPE_GIF :

$img = imagecreatefromgif($image_path);

break;

case IMAGETYPE_JPEG :

case IMAGETYPE_JPEG2000:

$img = imagecreatefromjpeg($image_path);

break;

case IMAGETYPE_PNG:

$img = imagecreatefrompng($image_path);

break;

case IMAGETYPE_BMP:

case IMAGETYPE_WBMP:

$img = imagecreatefromwbmp($image_path);

break;

case IMAGETYPE_XBM:

$img = imagecreatefromxbm($image_path);

break;

case IMAGETYPE_WEBP: //(从 PHP 7.1.0 开始支持)

$img = imagecreatefromwebp($image_path);

break;

default :

throw new \Exception('Invalid image type');

}

$function = 'image'.$to_ext;

if ($save_path) {

return $function($img, $save_path);

} else {

$tmp = __DIR__.'/'.uniqid().'.'.$to_ext;

if ($function($img, $tmp)) {

$content = file_get_contents($tmp);

unlink($tmp);

return $content;

} else {

unlink($tmp);

throw new \Exception('the file '.$tmp.' can not write');

}

}

}

/**

* 解决iPhone图片旋转问题

* $src 图片绝对路径

* $ver 手机版本号

* **/

private function rotateImage($filename,$ver){

$type = $this->getType($filename);

if($type == 'png' || $type == 'PNG') {

$this->transform_image($filename,'jpeg',$filename);

}

$exif = exif_read_data($filename);

if(!empty($exif['Orientation']) && $ver>0) {

$orientation = $exif['Orientation'];

if($exif['MimeType'] == 'image/gif'){

$image = imagecreatefromgif($filename);

}else if($exif['MimeType'] == 'image/png'){

$image = imagecreatefrompng($filename);

}else{

$image = imagecreatefromjpeg($filename);

}

if($ver > 1350000) {

switch ($orientation) {

case 8;

$image = imagerotate($image, 270, 0);

break;

case 3:

$image = imagerotate($image, 0, 0);

break;

case 6:

$image = imagerotate($image, 0, 0);

break;

}

}else if($ver >= 1350000 && $ver <1400000){

switch ($orientation) {

case 8;

$image = imagerotate($image, 0, 0);

break;

case 3:

$image = imagerotate($image, 0, 0);

break;

case 6:

$image = imagerotate($image, 0, 0);

break;

case 1:

$image = imagerotate($image, 0, 0);

break;

}

}else{

switch ($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;

}

}

if($exif['MimeType'] == 'image/gif'){

imagegif($image,$filename);

}else if($exif['MimeType'] == 'image/png'){

imagepng($image,$filename);

}else{

imagejpeg($image,$filename);

}

imagedestroy($image);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值