Search code examples
phplaravelfile-upload

Laravel is rotating the image when uploaded


I am developing a web application that involves the feature of uploading image to server. I am using Laravel. The problem is when I upload a photo, Laravel is rotating the image.

This is my code to upload image file.

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

Just one line of code for uploading the image.

I uploaded this image.

enter image description here

Then, the photo is rotated on the server and becomes like this. I display the image in the HTML tag. enter image description here

So, what is wrong. How can I stop the photo from being rotated?


Solution

  • This happen when you capture the image with Mobile camera.

    you can see the image data using exif_read_data()

    But if you want to store it in an orignal way you can use intervention/image package.

    and use orientate() to change it. Here is an example

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

    But if you dont want to use the Package you can try

    $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;
        }
    }
    

    Hope this helps.