
1 anjianshi 2013-07-08 13:53:44 +08:00 是想获得图片的尺寸,还是图片的文件大小? |
3 kenneth OP |
4 phuslu 2013-07-08 14:12:12 +08:00 按照 http 标准,完全不下载时不可能的,但是你可以只下载一部分头部。 之前写过一个根据文件头部读取 imagesize 的单文件 .py https://github.com/phuslu/imgsz/blob/master/__init__.py 楼主你只要喂给它图片的头部下载下来就可以了。 |
5 csx163 2013-07-08 14:12:26 +08:00 看了看要求,还是目测吧. 不下载如何知道呢,靠文件名么? |
7 centerqi 2013-07-08 14:40:45 +08:00 http 有个 head 请求,可以获取文件大小,你可以根据文件大小,得出一个经验值 http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html |
9 centerqi 2013-07-08 14:50:27 +08:00 很好算啊,你抓取 几万张图片,把每一个图片的大小和文件大小的关系算出来,你就能得到一个系数,我们每天抓取这么多图片,都是这样弄的,求这个系数很简单的,就是一个 y=ax的问题 |
11 centerqi 2013-07-08 15:01:51 +08:00 好吧,你自己试试就行,一个jpg的图片,5k和 50k的大小会一样吗? |
12 hengxin196 2013-07-08 15:02:26 +08:00 用过php的一个 大概是原理是通过获取头 根据头信息获取图片代码 你可以看看这个 http://hi.baidu.com/vvviop/item/162002149dc26817e3f986c0 |
13 firsthym 2013-07-08 15:03:49 +08:00 读到内存里面不行吗? |
16 dorentus 2013-07-08 16:21:45 +08:00 jpg 用 @centerqi 的方法是最不靠谱的吧…… 同样一张图片,导出时选择的参数不同,可以相差很多的: $ identify *.jpg 0.jpg JPEG 1280x720 1280x720+0+0 8-bit sRGB 126KB 0.010u 0:00.000 100.jpg[1] JPEG 1280x720 1280x720+0+0 8-bit sRGB 1.185MB 0.000u 0:00.000 50.jpg[2] JPEG 1280x720 1280x720+0+0 8-bit sRGB 280KB 0.000u 0:00.000 |
17 est 2013-07-08 17:24:40 +08:00 @centerqi 这个是你自己YY出来的吧。同一张jpeg,同一个尺寸,肉眼视网膜可以分辨完全一样的图片: 用不同scan, quant table, bit depth, color space, PPI 这些参数都能把你爆出翔。 |
21 pubby 2013-07-08 19:53:40 +08:00 根据各种图片格式,一般只要前面几十个字节就能得到 width ,height数据,不需要下载整张图。 以前拿php的getimagesize()的源代码改过一个的,识别算法都在里头。 |
22 guangwong 2013-07-08 20:35:25 +08:00 读出文件头来就完了= = |
24 centerqi 2013-07-09 10:26:55 +08:00 最好用数据说话,你去淘宝抓取 50w张图片,然后用这种方法去解决,准备率和招回率看能达到多少? 不要举几个特殊的例子,按你们的说法,做图片相似性计算,图片提取就完全没法做了,因为都会有 bad case. |
25 love 2013-07-09 10:55:54 +08:00 django源码里面有读文件头得图片长宽的代码段(用到了PIL),具体在图片字段代码这里 |
26 est 2013-07-09 10:57:13 +08:00 |
27 centerqi 2013-07-09 11:11:02 +08:00 楼上好好读读文字,我是用这种方式去做相似计算吗?我是举一下列子,就是通过大量的数据,能训练机器,去找到这个系数。 |
29 centerqi 2013-07-09 11:17:06 +08:00 用content-length去做相似计算,你这是什么思维啊? 不要误解有木有,把话读完读懂再来喷,好不好? 我很喜欢你这种思维,欢迎私喷,我的邮箱 \u0063\u0065\u006E\u0074\u0065\u0072\u0071\u0069\u0040\u0067\u006D\u0061\u0069\u006C\u002E\u0063\u006F\u006D |
30 centerqi 2013-07-09 11:18:50 +08:00 @est \u0032\u0039\u0030\u0035\u0036\u0030\u0035\u0033\u0032 我的qq,私聊 |
34 centerqi 2013-07-09 11:26:11 +08:00 @binux 我刚才仔细看了一下提问者的问题,可能我们理解都有误差,我是用我的职业思维去解决,提问者的想法是用什么简单的办法,快速获取图片大小,而我们想到的就是 DL,ML之类的,所以会有误解。 |
35 phuslu 2013-07-09 11:29:15 +08:00 @centerqi 楼主的需求我也做过,所以才写出来 imgsz 这个库。 一般来说获取远程图片的分辨率之后,接下来的处理是展示或者分类。 展示的话,一般就是瀑布流。分类的话,就是按不同的长宽比分类(16:9, 4:3)等等。 前者典型的应用就是 BT 工厂, 后者的话,各种壁纸站点。 |
41 timonwong 2013-07-09 12:08:27 +08:00 @centerqi BMP和PNG都还好说: BMP的width在0x12, height在0x16 (u32, little endian) PNG的width在0x10, height在0x14 (u32, big endian) JPEG稍微麻烦点,位置不固定,因为在magic header 0xff, 0xd8后一般都会跟个JFIF segment, 用于thumbnail,需要跳过(当然也不大,thumbnail最大也就255x255, 24bit RGB存放,无压缩),然后再读取width和height。 |
42 est 2013-07-09 12:27:52 +08:00 |
43 est 2013-07-09 12:36:36 +08:00 > 你就能得到一个系数,我们每天抓取这么多图片,都是这样弄的,求这个系数很简单的,就是一个 y=ax的问题 > 就是通过大量的数据,能训练机器,去找到这个系数。 大哥你这个系数是矢量还是啥? content-length(标量) x 系数标量 = 标量,LZ想要的是 (长、宽) 这个矢量啊大哥。 你这个系数最多能够获得图片的 像素值 (pixels),而且是 4:3 或者 16:9 常见 照片 的比例。 对于 长微博,全景图,截屏,素材 等等图片肯定都是无效的。 图片 ≠ 照片 btw 我记得以前 @livid 的 footbig 就是只允许 照片,禁止 图片的。可惜这个项目终止了 |
45 ETiV 2013-07-09 13:23:14 +08:00 图片服务器那边算出图片的宽高. 写进HTTP header. 你这边从HTTP header读. |