使用 cURL 获取远程图像然后重新采样

Posted

技术标签:

【中文标题】使用 cURL 获取远程图像然后重新采样【英文标题】:Get remote image using cURL then resample 【发布时间】:2010-04-13 12:25:46 【问题描述】:

我希望能够从网络服务器检索远程图像,对其重新采样,然后将其提供给浏览器并将其保存到文件中。这是我目前所拥有的:

$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "$rURL");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HEADER, 0);

// grab URL and pass it to the browser
$out = curl_exec($ch);

// close cURL resource, and free up system resources
curl_close($ch);

$imgRes = imagecreatefromstring($out);
imagejpeg($imgRes, $filename, 70);

header("Content-Type: image/jpg");
imagejpeg($imgRes, NULL, 70);
exit();

更新

根据下面的讨论更新以反映正确答案

【问题讨论】:

【参考方案1】:

您可以使用 imagecreatefromstring() 将文件提取到 GD 资源中:

imagecreatefromstring() 返回一个图像标识符,表示从给定数据中获得的图像。如果您的 php 版本支持这些类型,则会自动检测到这些类型:JPEG、PNG、GIF、WBMP 和 GD2。

从那里开始,使用imagecopyresampled() 非常简单。

使用imagejpeg() 或任何最适合您的输出格式输出。

使用文件名制作一个输出:

imagejpeg($image_resource, "/path/to/image.jpg");

然后将相同的资源发送到浏览器:

header("Content-type: image/jpeg");
imagejpeg($image_resource);

根据图像的格式,您可能希望使用 imagepng() 或 imagegif() 函数。

您可能希望根据输入文件类型使用不同的输出格式。您可以使用getimagesize() 获取输入文件类型。

请记住,您可以使用 $quality 参数调整生成的 JPEG 图像的质量。默认值为 75%,这看起来很糟糕。

【讨论】:

谢谢...我现在已经用您的信息更新了我的问题...这需要对图像进行两次重新采样,而不仅仅是一个.. 再次看起来效率低下。有什么更好的方法来做到这一点? @Chris 图片的两个重采样?为什么?您将相同的重采样资源存储到 jpeg 文件中,并提供它。为什么要重采样两次? 对不起,我误解了你写的内容。我已经更新了我的问题中的代码。它以较低的质量创建一次 jpeg。大概这足以降低文件大小?之后我将它保存到文件中,但是为了提供它,我需要再次读取文件,我可以不将它暂时存储在内存中还是可以忽略不计的开销? @Chris 你不需要做readfile。只需将文件名参数设置为null 第二次imagejpeg。会直接输出到浏览器中。

以上是关于使用 cURL 获取远程图像然后重新采样的主要内容,如果未能解决你的问题,请参考以下文章

使用 Pandas 重新采样然后填充原始数据框

重新采样表示图像的 numpy 数组

在python中从PDF中提取图像而不重新采样?

如何在 PHP 中(使用 GD)已经重新采样的图像上叠加水印?

图像复制在 PHP 中重新采样,有人可以解释一下吗?

在不重新采样图像层的情况下缩放扫描的 PDF