使用move_uploaded_file时imagerotate

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用move_uploaded_file时imagerotate相关的知识,希望对你有一定的参考价值。

试图解决来自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),具体取决于您要将其存储为的内容。

希望这可以帮助!

以上是关于使用move_uploaded_file时imagerotate的主要内容,如果未能解决你的问题,请参考以下文章

PHP move_uploaded_file() 错误?

move_uploaded_file() 无法打开流:没有这样的文件或目录

使用move_uploaded_file时imagerotate

使用 move_uploaded_file() 时如何在 PHP 中创建目标(文件夹)?

php中函数move_uploaded_file()移动中文文件报错的解决方法

PHP在使用move_uploaded_file函数移动文件时一直失败