`
java-mans
  • 浏览: 11416668 次
文章分类
社区版块
存档分类
最新评论

Chindle文字自动排版设计

 
阅读更多





设计目标:

根据给定的轮廓扩展函数生成中文图片。


设计思路:

从内向外逐步穷举,最坏情况下:逐个点进行测试。


基本算法:

main:

while not finish:

point = gen_point();

if ( ok = test(point))

add(point)


gen_point:

expand searching area base on last point



注意事项:

1. 文字排版

> 理论上文字排版应该支持所有的角度:横排,竖排,斜着排,等等,它通过矩形旋转角度angle来描述,目前只支持横排和竖排,为了便于计算,Chindle中每一个单词都用一个矩形来描述,系统记录矩形的A, C两点,以及矩形旋转角度(angle),通过A, C点可以计算出中心点(Center)、矩形宽(Width)、高(Height)。中心点在计算中比较好用。

2. 轮廓描述方法

> 最简单的轮廓是矩形、圆形等可以用方程描述的形状。对于自定义轮廓,可以采用枚举的方式定义区域。为了兼容所有轮廓,采用枚举方式定义区域。在枚举方式中,用户给定一个位图mask,在后继的计算中,与位图对比即可。如果溢出位图,则表示此位置不可放置文字。

3. 文字扩散方法

> 定义一个扩散函数,给几个最简单的扩散函数:螺旋函数、阻尼震动函数。

4. 版面大小

> 印刷要求80pixel/90pixel每英寸,一英寸约合2.5cm。对于一个50cm的图形,需要 90 pixel/inch * 1inch/2.5cm * 50cm = 90 * 50 / 2.5 pixel = 1800pixel

如果直接由php来生成这个像素级别,可能需要大量计算,这里采用的方法是客户端只生成小图片(450p * 450p),大图片在后端离线生成。大图片与小图片呈等比缩放关系。




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics