2010年3月13日星期六

Scruffy 0.2.6版Gem输出图片截断在200px高度的Bug

昨天看书,在练习书上的一个例子的时候,死活得不到想要的结果。虽然我告诉自己,不要太固执,程序跑起来就好了。不过我心里还是抓的慌,所以今天花了点时间解决了这个Bug,心里的石头总算放下来了。

事情是这样的:

Scruffy是一个Ruby的库,用来生成很漂亮的图形报表,使用简单,无需自己写ImageMagick的代码。项目主页在这里。不过郁闷的事情很快就来了。随便我怎么弄,生成的PNG和JPG图像总是被截断在200px的高度上。我那叫一个郁闷啊。所以我签出了项目的代码,决定找处Bug。

结果我一运行测试,嘿,一点问题没有。这就诡异了,难道gem包不是用源里面的代码生成的?于是我就下载了和gem包一起发布的tgz包,比较了这个包和trunk里的代码,结果发现了下面的差别:


35c35
< svg.svg(:xmlns => "http://www.w3.org/2000/svg", 'xmlns:xlink' => "http://www.w3.org/1999/xlink", :viewBox => "#{options[:size].first} 100 #{options[:size].last} 200") {
---
> svg.svg(:xmlns => "http://www.w3.org/2000/svg", 'xmlns:xlink' => "http://www.w3.org/1999/xlink", :viewBox => "0 0 #{options[:size].first} #{options[:size].last}") {



这下一切都清楚了。原来是设置SVG图像画布(ViewBox)的问题。而PNG和JPG是基于SVG生成的难怪有错了。

如果设置width参数为800,根据这个程序的默认设置,height为640。于是,SVG的画布就是[800, 100, 640, 200],而正确的设置应该是:[0, 0, 800, 640],这可差了十万八千里啊,难怪会出错呢。最终生成的图像的高度是640x200。所以,随便怎么设置图像尺寸,200总是个常数。

提交了Bug,发现早在09年11月27日就有人报告了这个Bug,但是直到现在问题都还没有解决。真是杯具。

附:修正Bug后Scruffy输出的漂亮图表:

没有评论:

发表评论