前天Google Buzz开通了,发现它会把Google Reader的文章都显示出来,折叠起来的话,文章里的图片会缩小,无聊看了一下地址,就是我上篇文章里的Ghost图片,发现地址如下

https://images2-focus-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2Fdl.dropbox.com%2Fu%2F2992664%2Fblog%2Fcod6_ghost.jpg&&container=focus&gadget=a&no_expand=1&resize_h=120&rewriteMime=image%2F*

并非用图片的原始地址,也不是用CSS来缩小的,也就是Google自己去原始地址抓取后,缩放一下再传过来。看到地址里有两个参数值得注意

  • 一个是“url”,看样子原始图片地址了,我随便找其它的图片地址替换一下,结果提示下载“p.txt”的文件,保存,改扩展名为“jpg”,果然是张图片。
  • 还有把“resize_h”,看来是缩放图片的宽度,改为0试试,再下载,果然表示不缩放,对比一下原始图片的md5,一样的。

哈哈,这下有得玩了,可以利用这个功能来做个图片代理,Google的高速服务器,不需要用户验证,还支持https的,爽!方法就是写个脚本,把网页里面的图片地址全部改写一下,几行代码而已,不过这方法不支持在css里引用的图片。实现了3种脚本,各有优劣,按需使用吧。

Greasemonkey

{zx0}想到就用Greasemonkey来实现,上传到userscript了,安装页面。可惜Greasemonkey的脚本是在网页加载完成后才执行的,那就是原始都显示出来后,再用代理下载一次,重复浪费资源了,除非原始地址刚好不能访问。匹配启用网页比较粗暴地写成“http://*”,改成你需要的网址,或者你手动来启用。

Bookmarklet

弄成浏览器书签是不错的主意 ,新建一个书签,名称为“Google图片代理“,粘贴下面代码到地址一栏。

javascript:(function(){prefix = "https://images2-focus-opensocial.googleusercontent.com/gadgets/proxy?url="; suffix = "&container=focus&gadget=a&no_expand=1&resize_h=0&rewriteMime=image%2F*"; images = document.getElementsByTagName("img"); for (var i = 0; i < images.length; i++) { if (images[i].src.indexOf(prefix) == -1) { images[i].src = prefix + images[i].src + suffix; } }})();

需要时点击一下这个书签就行了,好处就是不像Greasemonkey需要等网页加载完成,也不用刷新,你也可以使用“停止“按钮来直接停止加载网页。

FireGestures

我也使用了Noscript这个扩展,如果没把网站加进白名单的话,Bookmarklet是无效的,所以也写一个FireGestures脚本,看代码,复制粘贴为新脚本就可以了。

可惜Greasemonkey是在网页加载完成后才执行,不然就秒掉Opera Turbo了。用这方法能对付放在Picasa上的图片,或者干脆在服务端添加改写代码,应该也不难。