首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >上传时,Laravel正在旋转图像

问上传时,Laravel正在旋转图像
EN

Stack Overflow用户
提问于 2018-05-11 00:43:40
回答 3查看 11.9K关注 0票数 13

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

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

代码语言:javascript
复制
$request->file('image_file')->store('images');

只有一行上传图片的代码。

我上传了这张照片。

​

​

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

​

那么,到底出了什么问题。我怎样才能阻止照片被旋转?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-11 00:50:32

当你用移动相机拍摄图像时,就会发生这种情况。

您可以使用exif_read_data()查看图像数据

但是如果你想以一种原始的方式存储它,你可以使用intervention/image package。

并使用orientate()来更改它。下面是一个例子

代码语言:javascript
复制
$img = \Image::make($request->file('image_file')->getRealpath());
$img->orientate();

但是如果你不想使用Package,你可以试试

代码语言:javascript
复制
$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;
    }
}

希望这能有所帮助。

票数 36
EN

Stack Overflow用户

发布于 2021-05-13 01:20:19

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

代码语言:javascript
复制
/**
 * @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
票数 1
EN

Stack Overflow用户

发布于 2019-04-09 20:10:41

我找到了一种简单的方法来完成它对我的工作你只需将你的图片上传到google drive,然后再下载一次,如果它不起作用,我很抱歉,但它对我是有效的。

票数 -5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50277697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档