使用Curl获取图像尺寸

时间:2009-05-15 17:42:07

标签: php curl

我想要远程图像的高度*宽度。可以用Curl完成,如果是这样的话?

5 个答案:

答案 0 :(得分:5)

getimagesize()是您想要的功能。

它应该能够下载远程图像并进行分析。

编辑:作为您问题的更直接的答案,Curl无法直接分析图像,但它肯定可以为您获取,在这种情况下,您可以使用GD库进行分析。 getimagesize()也设法进行提取,因此你可以将Curl排除在等式之外。

答案 1 :(得分:3)

希望这个单独的帖子是有道理的,因为我担心这个答案会因为我之前的帖子上的评论而丢失。你问,为什么认为这应该是一个单独的帖子呢?好吧,我想我找到了答案。

当然我使用的是CLI版本而不是libcurl(用你选择的语言),但我得到了足够的好处,直到得到了一个有效的答案。它如下:

curl -r 0-25 --silent http://www.google.com/logos/giroux1.jpg | identify -format "%wx%h" -

上面示例中发生的是CURL使用-r标志仅请求文件的前25个字节,并使用名为IDENTIFY的imagemagick命令管道,在该命令中提取维度并在指定的位置打印出来格式。

有关您可以使用IDENTIFY提取的信息的更多信息,请访问http://www.imagemagick.org/script/identify.php

为了使命令更加友好,我会在末尾添加“2> / dev / null”来抑制错误消息(stderr):

curl -r 0-25 --silent http://www.google.com/logos/giroux1.jpg | identify -quiet -format "%wx%h" - 2> /dev/null

与尺寸似乎与前10-20字节紧密相关的GIF图像不同,从JPEG获取尺寸数据似乎没有固定数量的字节。更多的测试表明,对于大型图像,您可能需要请求第一个~10k来获取尺寸数据。一个很好的例子是来自NASA的以下4MB图像:http://veimages.gsfc.nasa.gov/17921/southern_africa_25jul02_lrg.jpg我发现不少于5971个字节将呈现尺寸(10836 x 9324),但我想这比必须下载整个内容更好。

指出......你的里程可能会有所不同,所以自己尝试一下。

答案 2 :(得分:1)

卷曲不能那样做。引自http://curl.haxx.se/

  

块引用   curl是一个命令行工具,用于传输具有URL语法的文件,支持FTP,FTPS,HTTP,HTTPS,SCP,SFTP,TFTP,TELNET,DICT,LDAP,LDAP和FILE。 curl支持SSL证书,HTTP POST,HTTP PUT,FTP上传,基于HTTP表单的上传,代理,cookie,用户+密码认证(基本,摘要,NTLM,协商,kerberos ......),文件传输恢复,代理隧道和大量其他有用的技巧。

Curl可用于查看http标头并猜测图像类型,但要确定图像的尺寸,您需要图像本身。

你可以使用例如。 Python Imaging Library以便在下载图片时实际检查尺寸。

答案 3 :(得分:1)

图像的高度和宽度是图像文件中的属性,您需要撤消文件才能访问它们。根据图像格式,此属性将位于图像元数据的不同位置。您可以使用getimagesize执行此操作,但请记住,您实际上正在检索完整图像,这将影响您的操作性能。

如果图像较大,您可以尝试将图像开始渲染到服务器,并且一旦开始接收数据并了解图像的格式,请等待,直到您从图像中收到足够的图像在高度和宽度信息,并停止转移。您很可能需要自己完成这项工作,因为API中的图像库和内置函数可能会使整个图像正常工作。

如果你偶然控制了图像所在的服务器,你最好写一个托管在该服务器上的小脚本,给定一个图像文件标识符返回该图像的高度和宽度。

答案 4 :(得分:1)

根据CURL文档:

  

使用HTTP 1.1字节范围   介绍。使用它,客户端可以   请求只获得一个或多个   指定文件的子部分。卷曲   使用-r标志支持此功能。

Get the first 100 bytes of a document:  
    curl -r 0-99 http://www.get.this/

Get the last 500 bytes of a document:  
    curl -r -500 http://www.get.this/

鉴于您可以通过CURL请求部分图像,可能能够完成您想要做的事情。现在关键是能够将部分图像传递给GD(或您选择的应用程序)以提取和报告图像尺寸。

如果您只使用JPEG,您的生活会变得更容易,因为尺寸存储在带有指定标记的标题文件的开头。请参阅stackoverflow上标题为“Getting Image size of JPEG from its binary”的其他讨论。

虽然它需要更多的工作,但似乎会让你找到正确的标记:

curl -r 0-999 --url http://www.google.com/logos/giroux1.jpg | grep -n $'\xc0'

我在Google上搜索JPEG信息时遇到的其他一些参考资料来源: