2012-10-19 206 views
3

我需要在Ruby on Rails中获取图像的大小。该图像位于远程URL中。 我不想下载整个图像。获取图像的宽度和高度而不下载图像

+0

我需要信息服务器端,图像在远程URL(即Facebook)。我需要将链接存储在数据库中,以及宽度和高度,但不需要下载它。 – Tony

+1

图像的大小通常位于其标题中,因此除非您有服务器提供您需要的信息(即读取标题并提供尺寸),否则无法完成此操作。 –

+1

这[后] [1]几乎涵盖了你需要知道的东西。 [1]:http://stackoverflow.com/questions/11962445/validating-or-reading-a-remote-image-type-in​​-javascript –

回答

6

如果没有真正下载图像(如使用带宽),您很可能无法做到这一点。

这就是说,你可以使用FastImage宝石为你做这个。

require 'fastimage' 

FastImage.size("http://stephensykes.com/images/ss.com_x.gif") 
=> [266, 56] # width, height 
+0

我想这个工作对我来说... – ahnbizcad

0

Validating or reading a remote image type in javascript”几乎涵盖了你需要知道的东西。如果你真的需要它可能会更深一些,但它很好解释。

否则,您可以创建一个服务器端控制器来只做一次。您可以从任何地方读取图像及其尺寸。用户获取图像时,将从服务器的“缓存”中读取尺寸,而不再次下载图像尺寸。如果关于该特定图片的信息不可用,您将获取并存储尺寸和URL。这可以节省很多带宽。

0

HTTP头唯一的要求不会帮你

$ http -h get "http://cdn.sstatic.net/stackoverflow/img/sprites.png" 
HTTP/1.1 200 OK 
Cache-Control: max-age=604800 
Connection: close 
Content-Length: 16425 
Content-Type: image/png 
Date: Fri, 19 Oct 2012 13:39:15 GMT 
ETag: "0d1523d7cadcd1:0" 
Last-Modified: Thu, 18 Oct 2012 22:02:18 GMT 
Server: NetDNA-cache/2.2 

所以,你会需要一些HTTP响应体。但是一些图像文件格式的顶部有描述分辨率的标题(尽管jpeg不支持)。所以也许你可以为这一点做一个部分HTTP请求(范围请求)。

+0

如果我没有记错,在繁忙的系统上取消请求并不是一个好的解决方案。它绑定IP栈中的资源,可能在客户端和主机上。 –

相关问题