代码之家  ›  专栏  ›  技术社区  ›  Mark Henry

使用Curl获取图像尺寸

  •  1
  • Mark Henry  · 技术社区  · 16 年前

    我想要远程图像的高度*宽度。卷曲可以做到吗?如果可以,怎么做?

    5 回复  |  直到 16 年前
        1
  •  5
  •   zombat    16 年前

    getimagesize() 是您想要的功能。

    编辑:对于您的问题,更直接的回答是,Curl无法直接分析图像,但它肯定可以为您提取图像,在这种情况下,您可以使用GD库对其进行分析。不过,getimagesize()也会进行抓取,因此可以将Curl排除在等式之外。

        2
  •  4
  •   John Mark Mitchell    15 年前

    希望这篇单独的帖子是有理由的,因为我担心这个答案会因为只是对我上一篇帖子的评论而丢失。你会问,为什么你认为这值得一个单独的帖子呢?嗯,我想我找到了答案。

    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
    

    与GIF图像不同,GIF图像的尺寸似乎与前10-20个字节紧密相连,从JPEG获取尺寸数据似乎不需要固定数量的字节。更多的测试表明,对于大型图像,您可能需要请求高达前10k的数据才能获取维度数据。一个很好的例子是美国宇航局提供的以下4MB图像: http://veimages.gsfc.nasa.gov/17921/southern_africa_25jul02_lrg.jpg 我发现不少于5971字节将呈现维度(10836 x 9324),但我想这比下载整个内容要好。

    重点是…你的里程数可能会有所不同,所以你自己试试吧。

        3
  •  1
  •   palako    16 年前

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

    如果图像较大,您可以尝试将图像传送到服务器,并在开始接收数据并了解图像格式后,等待从图像接收到足够的高度和宽度信息并停止传输。您很可能需要自己完成这项工作,因为API中的图像库和内置函数可能希望完整图像能够正常工作。

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

        4
  •  1
  •   Thomas Watnedal    16 年前

    我不能那样做。引用 http://curl.haxx.se/

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

    你可以使用 Python Imaging Library 但在下载图像时实际检查尺寸。

        5
  •  1
  •   Community CDub    8 年前

    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/
    

    可以 很好,你能完成你想做的事情。现在关键是能够将部分图像传递给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'