Intervention Image:如何直接从URL保存图片并保留原始文件名和扩展名?

19

当从远程服务器获取图像时,如何获取文件名?如何以原始大小和文件名保存图像?

// Take remote image
$img = Image::make('http://image.info/demo.jpg');
// how to save in the img/original/demo.jpg
$img->save(????);

我使用Intervention (http://image.intervention.io/api/make) 来构建CakePHP 3的图像行为。我希望提供一种简单的从远程服务器上传图片并保留原始图片作为将来操作源的方式。

编辑

我想问一下, 是否有Intervention Image方法可以返回从远程服务器取回的文件名称。我知道php的copy()、basename()函数,我也可以使用CakePHP的文件工具,但这会导致对远程文件的重复请求。


可能是从远程服务器通过HTTP复制图像的重复问题。 - user1669496
不是重复的。 - Salines
3个回答

38

response()函数不像Salines所请求的那样返回原始文件名。这应该可以解决。

$path = 'https://istack.dev59.com/koFpQ.webp';
$filename = basename($path);

Image::make($path)->save(public_path('images/' . $filename));

4
您可以使用make();response();方法轻松实现。请查看下面的代码。
请注意,必须启用allow_url_fopen才能获取远程图像。
这将显示我的个人资料图片。如果您没有使用Laravel Framework,请将return替换为echo
$img = Image::make('https://istack.dev59.com/koFpQ.webp');
header('Content-Type: image/png');
return $img->response();

希望这能对您有所帮助,如果有用请点赞我的回复;如果需要进一步帮助,请随时提问。

我喜欢它,不需要暂时存储在服务器上。但是我有一个问题。是否有一种方法可以使其适用于文件?例如,我的用户可以上传照片或PDF文档...我该如何处理? - Joe Yahchouchi

0

首先在public文件夹内创建一个名为images的新文件夹,然后执行以下代码从URL下载图像并将其保存在public\images文件夹中

        $url = 'http://example.com/image.png';
        $img = public_path('images') . '\\test.png';
        file_put_contents($img, file_get_contents($url));
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接