中文信息处理技术专栏

中文信息处理技术专栏


首页  中文信息处理技术专栏

  • 点阵字库的压缩
  • 时间: 2017-06-27    阅读数: 13
  • 1.字形库的压缩

    由于书刊、报纸实际印刷中对汉字点阵的要求通常很高,因此往往需要使用512*512点阵或者1024*1024点阵的汉字字形库。以512*512为例,此时一个汉字就需要512*512/8=32KB的存储空间,那么如果采用512*512点阵把GBK中每个汉字以宋体、楷体、仿宋体、黑体四种最常用的字体描述出来,就需要20902*4*32KB=2612.75MB的存储空间,如果采用1024*1024点阵需要10451MB。而实际上我国印刷用汉字至少需要20多种字体、20多种字号,这一个存储需求在上个世界八十年代和九十年代初期是难以接受的。显然迫切需要对点阵字库进行压缩存储,从而降低对存储的要求。

    对汉字字形库采用的常用压缩方法有:黑白段压缩法、部件压缩法和轮廓字型压缩法。其中,轮廓字型压缩法是如今最流行的方法,这种方法压缩比大,且能保证汉字的质量。黑白段压缩法是专门针对点阵字库的压缩方法,该方法具有简单、容易实现的优点。

    2.黑白段压缩法

    黑白段压缩法是上个世纪60年代德国Hell公司首先在第三代阴极射线管照排机Digiset上采用的方法,黑白段描述法只记录字形水平方向上每条线的各个黑段和白段的长度,而不存储整个点阵。字形点阵可以毫不失真地复原。

    黑白段压缩的思想:有数据的部分被称为黑段,无数据的部分被称为白段,然后通过扫描点阵信息交替记录下每行的黑段与白段,并设计了“重复行数”来处理汉字中大量存在的连续多行点阵信息相同的情况。

    黑白段的具体记录原始数据格式如下:

    【行标识】【重复行数】【白段】【黑段】……【白段】【黑段】

    例如,“王”字的48*48点阵的宋体字形如图1所示,设行标记为“*”,则它的黑白段压缩码的存储参见表1

    1 “王”字的48*48点阵字形

    1 “王”字形黑白段压缩描述

    行标记

    重复行数

    白段

    黑段

    白段

    黑段

    白段

    *

    5

    48

      

      

      

      

    *

    1

    40

    1

    7

      

      

    *

    1

    39

    3

    6

      

      

    *

    1

    38

    5

    5

      

      

    *

    1

    8

    36

    4

      

      

    *

    12

    24

    3

    21

      

      

    *

    1

    24

    3

    11

    1

    9

    *

    1

    24

    3

    10

    3

    8

    *

    1

    24

    3

    9

    5

    7

    *

    1

    10

    33

    5

      

      

    *

    14

    24

    3

    21

      

      

    *

    1

    24

    3

    15

    3

    3

    *

    1

    24

    3

    14

    5

    2

    *

    1

    5

    42

    1

      

      

    *

    6

    48

      

      

      

      

      

    3.黑白段的压缩效果

    8.1中的“王”字的点阵字形直接存储到计算机的时候,占用了48*48/8=288个字节。采用了黑白段压缩法压缩后,设行标记、重复行数、白段、黑段都占用一个字节,那个“王”字需要占用81个字节,压缩效果应该是非常明显的。由于每一行黑段和白段的和应该是48,在实际实现的时候每行最后一个黑白段信息可以通过48减去该行前面各项的和计算出来,因此每行最后一个黑白段信息可以省略,如果这样的话,48*48点阵的“王”字只需要用66个字节存储。显然对于点阵数越大的字形库,黑白段的压缩率越好。

    4.线性增量压缩法

    对图1中“王”字进行观察,很容易发现:其中第6到第8行,左边的白段在逐渐递减一个,中间的黑段的逐渐递增两个,右边的白段在逐渐递减一个。下面两横的笔锋同样也呈现如此的规律。此时可以使用线性增量方法对黑白段进行改进与优化。线性增量主要用于处理汉字点阵中大量存在的斜线,它的思想是:在一行黑、白段记录信息的后面再注明线段的增量,这样下一行的黑、白段长度在上一行的基础上按增量的大小作相应的变化。

    线性增量的具体记录原始数据格式如下:

    【行标识】【重复行数】【白段】【白段增量】【黑段】【黑段增量】

    ……【白段】【白段增量】【黑段】【黑段增量】

    因为线性增量式黑白段的辅助手段,二者处理后的数据会同时出现。因此在表示数据的时候,为了与黑白段所表示的行加以区别,线性增量表示的行标记应该有所不同。表2显示了对“王”字综合使用黑白段与线性增量之后的压缩数据,其中以“*”开头的行表示是黑白段压缩,以“$”开头的行表示以线性增量压缩,所以在每个黑白段的数据后面多了一个增量信息。

    2 “王”字形黑白段和线性增量综合压缩的描述

    行标记

    重复行数

    白段

    黑段

    白段

    黑段

    白段

    *

    5

    48

      

      

      

      

    $

    3

    40

    -1

    1

    2

    7

    -1

      

      

    *

    1

    8

    36

    4

      

      

    *

    12

    24

    3

    21

      

      

    $

    3

    24

    0

    3

    0

    11

    -1

    1

    2

    9

    -1

    *

    1

    10

    33

    5

      

      

    *

    14

    24

    3

    21

      

      

    $

    2

    24

    0

    3

    0

    15

    -1

    3

    2

    3

    -1

    *

    1

    5

    42

    1

      

      

    *

    6

    48

      

      

      

      

      


地址:苏州市十梓街1号 苏州大学纵横研究所联系电话:0512-65243192电子邮箱:ckc@suda.edu.cn

Copyright © 苏州大学纵横汉字信息技术研究所 2017