如何使用Laravel 5处理从AWS S3下载的映像?

时间:2016-02-28 22:18:59

标签: php image-processing amazon-s3 laravel-5

我想从AWS S3下载图像并使用php处理它。我正在使用“imagecreatefromjpeg”和“getimagesize”来处理我的图像,但似乎

存储::磁盘( 'S3') - >获得(imageUrlonS3);

以二进制形式检索图像并给我错误。这是我的代码:

function createSlices($imagePath) {

                //create transform driver object
                $im = imagecreatefromjpeg($imagePath);
                $sizeArray = getimagesize($imagePath);

                //Set the Image dimensions
                $imageWidth = $sizeArray[0];
                $imageHeight = $sizeArray[1];

                //See how many zoom levels are required for the width and height
                $widthLog = ceil(log($imageWidth/256,2));
                $heightLog = ceil(log($imageHeight/256,2));


                //more code here to slice the image
                .
                .
                .
                .
            }

            // ex: https://s3-us-west-2.amazonaws.com/bucketname/image.jpg
            $content = Storage::disk('s3')->get(imageUrlonS3);
            createSlices($content);

我在这里缺少什么?

由于

1 个答案:

答案 0 :(得分:0)

我认为你的问题是正确的 - get方法返回自身图像的来源,而不是图像的位置。当您将其传递给createSlices时,您传递的是二进制数据,而不是文件路径。在createSlices内,您调用imagecreatefromjpeg,它需要文件路径,而不是图像本身。

如果确实如此,您应该能够使用createimagefromstring代替createimagefromjpeggetimagesizefromstring代替getimagesize。函数createimagefromstringgetimagesizefromstring都需要图像的二进制字符串,我相信这就是你所拥有的。

以下是相关文档:

createimagefromstring - http://php.net/manual/en/function.imagecreatefromstring.php

getimagesizefromstring - http://php.net/manual/en/function.getimagesizefromstring.php

结果代码可能如下所示:

function createSlices($imageData) {
    $im = imagecreatefromstring($imageData);
    $sizeArray = getimagesizefromstring($imageData);

    //Everything else can probably be the same
    .
    .
    .
    .
}

$contents = Storage::disk('s3')->get($imageUrlOnS3);
createSlices($contents);

请注意我没有对此进行过测试,但我相信我在您的问题中可以看到的内容以及我在文档中看到的内容,这可能就是这样做的。