使用 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 获取远程图像然后重新采样的主要内容,如果未能解决你的问题,请参考以下文章