最近做一个H5活动的时候遇到问题,在做人脸识别的时候出现本地上传文件太大从而无法识别人脸,这是接口的大小限制,需要先在前端压缩,将返回的base64格式的二进制文件图片字符串上传到服务器,使用的下面的方法.
$base64_img = trim($_POST['img']); //POST接收图片base64格式
$dates=date("Y-m-d"); //这是我的图片上层目录
$path="http://www.*****.com"; //服务器网址网址
$rand=md5(microtime(true)); //生成的图片名字
$up_dir = './Upload/'.$dates.'/';//存放在当前目录下
if(!file_exists($up_dir)){
mkdir($up_dir,0777);
}
if(preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_img, $result)){
$type = $result[2];
if(in_array($type,array('jpeg','jpg','gif','bmp','png'))){
$new_file = $up_dir.$rand.'.'.$type;
if(file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_img)))){
$img_path = str_replace('../../..', '', $new_file);
echo $path.substr($img_path,1); //拼接网址并输出
}else{
echo '图片上传失败</br>';
}
}else{
//文件类型错误
echo '图片上传类型错误';
}
}else{
//文件错误
echo '文件错误';
}
}else{
echo "参数不正确";
}
先解决了图片上传,然后ios上传图片时候出现了图片翻转的问题,最后找到一个可以使用的方法.直接调用方法即可.
//src 图片完整路径
//$direction 1顺时针90 2 逆时针90
function imgturn($src,$direction=1)
{
$ext = pathinfo($src)['extension'];
switch ($ext) {
case 'gif':
$img = imagecreatefromgif($src);
break;
case 'jpg':
case 'jpeg':
$img = imagecreatefromjpeg($src);
break;
case 'png':
$img = imagecreatefrompng($src);
break;
default:
die('图片格式错误!');
break;
}
$width = imagesx($img);
$height = imagesy($img);
$img2 = imagecreatetruecolor($height,$width);
//顺时针旋转90度
if($direction==1)
{
for ($x = 0; $x < $width; $x++) {
for($y=0;$y<$height;$y++) {
imagecopy($img2, $img, $height-1-$y,$x, $x, $y, 1, 1);
}
}
}else if($direction==2) {
//逆时针旋转90度
for ($x = 0; $x < $height; $x++) {
for($y=0;$y<$width;$y++) {
imagecopy($img2, $img, $x, $y, $width-1-$y, $x, 1, 1);
}
}
}
建议直接用下面的方法,经过我实践下面的方法能够翻转图片角度并直接上传图片,效率和实用性很高.
另外向大家推荐另一种IOS图片翻转的解决方案,博客原文:https://www.cnblogs.com/mumuxinfei/p/5523798.html