事情是这样的:
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输出的漂亮图表:
没有评论:
发表评论