试图解决来自IOS设备上传图像的问题,其中保持exif方向导致它们有时被旋转。
我发现许多片段使用imagerotate来解决这个问题,但试图实现它们。
为了保存我正在使用的图像:
$moveUploadedFile = move_uploaded_file($fileToUpload["tmp_name"], $this->uploadDir . "/" . $newFileName);
(取自防弹图片上传课程)
我很好地使用switch语句来检查exif数据,但是无法使move_uploaded_file工作。
我试过(测试)例如:
$image = $fileToUpload["tmp_name"];
$image = imagerotate($image, 90, 0);
$moveUploadedFile = move_uploaded_file($image, $this->uploadDir . "/" . $newFileName);
这给了我move_uploaded_file的错误,请求字符串BUT接收资源。
有帮助吗?
先生,先生
public function moveUploadedFile($tmp_name, $destination)
{
if(move_uploaded_file($tmp_name, $destination)){
$this->image_rotation();
return true;
}
}
public function image_rotation(){
/* Check if the image is rotated,
* and if it's rotates. Fix it!
*/
// $filename = __DIR__ . '/'.$this->location .'/'. $this->name . '.' . $this->mime;
$filename = $this ->fullPath;
$exif = exif_read_data($filename);
if (isset($exif['Orientation']))
{
switch ($exif['Orientation'])
{
case 3:
// Need to rotate 180 deg
$degrees = 180;
break ;
case 6:
// Need to rotate 90 deg clockwise
$degrees = -90;
break ;
case 8:
// Need to rotate 90 deg counter clockwise
$degrees = 90;
break ;
}
if (preg_match("/jpg|jpeg/", pathinfo($filename, PATHINFO_EXTENSION)))
{
$image_source = imagecreatefromjpeg($filename);
$rotate = imagerotate($image_source, $degrees, 0);
imagejpeg($rotate, $filename, 100);
}
if (preg_match("/png/", pathinfo($filename, PATHINFO_EXTENSION)))
{
$image_source = imagecreatefrompng($filename);
$rotate = imagerotate($image_source, $degrees, 0);
imagepng($rotate, $filename, 100);
}
if (preg_match("/gif/", pathinfo($filename, PATHINFO_EXTENSION)))
{
$image_source = imagecreatefromgif($filename);
$rotate = imagerotate($image_source, $degrees, 0);
imagepng($rotate, $filename, 100);
}
imagedestroy($image_source); //free up the memory
imagedestroy($rotate); //free up the memory
}
}
$ image是一种资源。但是,move_uploaded_file会获取上传文件的文件名以及目标(http://php.net/manual/en/function.move-uploaded-file.php)
您有一个要保存的资源,而不是特定路径上的上载文件。
使用imagejpeg($ image,$ destination)或imagepng($ image,$ destination),具体取决于您要将其存储为的内容。
希望这可以帮助!