我想要远程图像的高度*宽度。可以用Curl完成,如果是这样的话?
答案 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信息时遇到的其他一些参考资料来源:
在不读取整个文件的情况下用C ++读取JPEG尺寸
在C#中读取JPEG尺寸而不读取整个文件
用Java读取JPEG尺寸而不读取整个文件
Java/ImageIO getting image dimensions without reading the entire file?
JPEG标题信息
http://web.archive.org/web/20080224153210/http://www.obrador.com/essentialjpeg/headerinfo.htm