13

我知道可以使用 imagecreatefromjpeg()、imagecreatefrompng() 等,并将 URL 作为 fopen() 的“文件名”,但由于安全问题,我无法启用包装器。有没有办法在不启用它们的情况下将 URL 传递给 imagecreatefromX() ?

我也尝试过使用 cURL,这也给我带来了问题:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.../image31.jpg"); //Actually complete URL to image
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);

$image = imagecreatefromstring($data);
var_dump($image);

imagepng($image);
imagedestroy($image);
4

3 回答 3

25

您可以使用 cURL 下载文件,然后将结果通过管道传输到imagecreatefromstring.

例子:

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $imageurl); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // good edit, thanks!
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); // also, this seems wise considering output is image.
    $data = curl_exec($ch);
    curl_close($ch);

    $image = imagecreatefromstring($data);
于 2012-09-09T08:43:40.663 回答
1

您甚至可以使用stream_wrapper_register为“http”实现基于 cURL 的流包装器。

于 2012-09-09T08:45:24.540 回答
0

您总是可以将图像(例如使用 cURL)下载到临时文件中,然后从该文件加载图像。

于 2012-09-09T08:39:07.393 回答