1
anjianshi 2013-07-08 13:53:44 +08:00
是想获得图片的尺寸,还是图片的文件大小?
|
3
kenneth OP |
4
phuslu 2013-07-08 14:12:12 +08:00 3
按照 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读.
|