代码之家  ›  专栏  ›  技术社区  ›  Ryan

自动换行文字以适应一定比例(不是大小)的矩形

  •  2
  • Ryan  · 技术社区  · 14 年前

    任何人都知道一种算法,它可以在字边界上打破文本以适应某个近似的矩形。 比率 -例如60:40(宽:高)?

    注意,这不仅仅是宽度(例如80字符或600 px等)和任意高度,它排除了我能找到的每一个单词包装算法。

    javascript的优点,但这更多的是算法而不是实现。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Andreas Dolk    14 年前

    这可以做到:

    int lineHeight := getHeightOfTextLine()
    int lines := 0
    do {
      lines += 1
      int width = lines * lineHeight * ratio
      String wrappedText := break(input, width)
    } while(getNumberOfLines(wrappedText) != lines)
    

    从一条线开始,我简单地测试每一个高度(线高度的倍数),如果我有一个给定的定额可以容纳文本的矩形。如果在计算宽度处打断文本会导致字符串的行数超过允许的行数(运行时),请继续,否则我有一个解决方案。

        2
  •  1
  •   Community noseratio    7 年前

    好吧,如果您从每个单词的高度和宽度数组开始,那么您需要遍历几个可能性,直到找到给定宽度的最小浪费(单词和之间的空间):高度

    通常你会从

    ratio := 6 / 4
    noOfLines := totalWidth / ( ratio * lineHeight )
    targetLineWidth := totalWidth / noOfLines
    

    然后试着确定在哪些单词之后要换行,以尽量减少单词之间的间距。

    如果试图最小化每行的空间,最后一行可能会有多余的空间。 如果你首先确保最后一行是均匀分布的,那么你应该仔细检查几个变化。

    编辑
    如果你想搞乱精确的字体标准, this 问答看起来很有用。