Laravel在上传时旋转图像

时间:2018-05-10 16:43:40

标签: php laravel file-upload

我正在开发一个涉及将图像上传到服务器的功能的Web应用程序。我正在使用Laravel。问题是当我上传照片时,Laravel正在旋转图像。

这是我上传图片文件的代码。

$request->file('image_file')->store('images');

只需一行代码即可上传图片。

我上传了这张图片。

enter image description here

然后,照片在服务器上旋转,变成这样。我在HTML标记中显示图像。 enter image description here

那么,出了什么问题。如何阻止照片旋转?

3 个答案:

答案 0 :(得分:7)

使用移动相机拍摄图像时会发生这种情况。

您可以使用exif_read_data()

查看图像数据

但如果您想以原始方式存储它,可以使用intervention/image package

并使用orientate()进行更改。这是一个例子

$img = \Image::make($request->file('image_file')->getRealpath());
$img->orientate();

但如果您不想使用Package,可以尝试

$exif = exif_read_data($request->file('image_file'));
if(!empty($exif['Orientation'])) {
    switch($exif['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;
    }
}

希望这有帮助。

答案 1 :(得分:0)

我找到了一种对我有用的简便方法,您只需将图像上传到Google驱动器中,然后再次下载即可,如果对不起,对不起,对我有用

答案 2 :(得分:0)

我在使用 Snappy PDF/Image Wrapper for Laravel wkhtmltopdf 将 HTML 转换为 PDF 时遇到了这个问题,以下解决方案对我有用:

/**
 * @param \Illuminate\Http\UploadedFile $filename
 */
function correctImageOrientation($filename)
{
    if (function_exists('exif_read_data')) {
        $exif = exif_read_data($filename);
        if ($exif && isset($exif['Orientation'])) {
            $orientation = $exif['Orientation'];
            if ($orientation != 1) {
                $img = imagecreatefromjpeg($filename);
                $deg = 0;
                switch ($orientation) {
                    case 3:
                        $deg = 180;
                        break;
                    case 6:
                        $deg = 270;
                        break;
                    case 8:
                        $deg = 90;
                        break;
                }
                if ($deg) {
                    $img = imagerotate($img, $deg, 0);
                }
                // then rewrite the rotated image back to the disk as $filename
                imagejpeg($img, $filename->getPath() . DIRECTORY_SEPARATOR . $filename->getFilename(), 100);
            } // if there is some rotation necessary
        } // if have the exif orientation info
    } // if function exists
}

$fileInputs = $request->file();
/** @var UploadedFile $file */
$file = $fileInputs['value'];
correctImageOrientation($file);

// then save the image