文字图像处理资料(共50页)_第1页
文字图像处理资料(共50页)_第2页
文字图像处理资料(共50页)_第3页
文字图像处理资料(共50页)_第4页
文字图像处理资料(共50页)_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ImageMagick文字(wnz)图像处理 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815783 ImageMagick的文本(wnbn)操作选项 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815784 标签(bioqin)简单的文本标签 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/03

2、01/44.html l _Toc318815785 基本标签 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815786 最合适的文本图像 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815787 垂直标签 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318

3、815788 标题包裹文字的标签 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815789 最佳匹配标题 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815790 标题与段落 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815791 文本属性 HYPE

4、RLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815792 标签图像边界 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815793 Unicode或UTF8格式文本 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815794 符号字体 HYPERLINK /top

5、ic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815795 字符间距 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815796 单词间距 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815797 行间距 HYPERLINK /topic/a/tupianzhuanti/ImageM

6、agick/zhongji/2012/0301/44.html l _Toc318815798 文本文本格式页 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815799 修剪文字页 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815800 Postscript / PDF预格式化文本和图形输入(或其它矢量图像格式) HYPERLINK /topic/a/tupian

7、zhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815801 直接使用Ghostscript HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815802 绘画在现有的画布上绘制文本 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815803 底色区域 HYPERLINK /topic/a/tupianzhua

8、nti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815804 溢出边界区域 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815805 注释文本绘制选项 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815806 自动调整注释文字的画布尺寸 HYPERLINK /topic/a/tupianzhuanti/Image

9、Magick/zhongji/2012/0301/44.html l _Toc318815807 使用“底色区域(Undercolor Box)”自动调整尺寸 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815808 对灰度文本图像进行着色 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815809 文本参数中的特殊转义字符 HYPERLINK /topic/a/tu

10、pianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815810 用户定义的转义字符选项 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815811 确定字体尺寸,而不使用API HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815812 老版本的技术 HYPERLINK /topic/a/tupianz

11、huanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815813 使用混合字体样式创建一行文本 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815814 填充表格 HYPERLINK /topic/a/tupianzhuanti/ImageMagick/zhongji/2012/0301/44.html l _Toc318815815 文字处理替代方案创建文本标签或添加文本到图像中,可能是使用ImageMagick进行的最基

12、本也是最常见的操作之一。同时,它还是最简单,但又能产生一些非常奇妙结果的操作。因此这是一个很好的选择,用来开始我们对IM能力的探索。ImageMagick的文本(wnbn)操作选项ImageMagick中有很多不同的方式可以用来(yn li)在一张图像中绘制文本,这全靠了它强大的多功能图像处理库。本页的将详细介绍各种文本绘制的具体方法和风格。当你研究这些例子时必须要记住的是,ImageMagick主要是一个图像(t xin)转换器和修改器。因此每个方法中提供的都是一些简单的文本绘制选项,如将标签和版权信息添加到图像中。参见 HYPERLINK /Usage/annotating/ Annota

13、ting Images。所有这些文字操作选项也支持和使用一套标准的文本处理设置,如命令里使用的“-font”和“-pointsize”设置等。同时还包括“-fill”颜色设置和更复杂文本使用的“-strokewidth”、“-stroke”和“-undercolor”等选项。实际上,当你创建一张新的图像时,例如标签和标题,那么可能还要使用“-background”颜色设置。最后还有新加入的字距调整(-kerning)和词间的间距(-interword-spacing)选项。但是ImageMagick并不是一个很好的格式化文本或文档处理器。如果你想进行高级的文字处理,你最好使用一个完整的交互式文

14、字处理器,或者文本批处理器,如“TeX”(或与它相同的工具,参看下面介绍的完整文字处理系统)。这些方案的输出(一般是PostScript格式)接下来可以被转换成图像,然后使用ImageMagick来进一步修改,也就是说,使用合适的工具进行合适的工作。这就是说可以完成一些混合的字体处理。详情参考本页最后介绍的创建混合字体样式的线条。现在,让我们一起学习将文本转换成图像的基本途径,接下来我们再看看如何生成一些有趣的字体效果。标签简单的文本标签基本标签通过使用“label:”图像命令就可以创建一张字体图像,这是ImageMagick中比较典型的快速绘制字体的方法。这种方法的最大好处是,可以根据当前的

15、-background和-fill颜色设置生成自己的画布,用来匹配绘制文本的尺寸。例如,这里是一个典型的生成标签的例子。convert -background lightblue -fill blue -font Candice -pointsize 72 label:Anthony label.gif在上面大概是最典型的添加标签的方法,通过选择字体(zt)(-font)和字号(-pointsize)来定义结果图像。但是,这也是生成文本标签的最没趣的方法。使用“label:”命令生成标签图像,也会在图像属性设置的元数据中产生相同的字符串。某些文件格式,例如MIFF和PNG,将保存这些特定的信息

16、并影响或在以后的图像处理操作中使用。如果你还指定了-size选项,那么生成的标签图像将被创建为这个(zh ge)设定的尺寸。convert -background lightblue -fill blue -font Candice -size 165x70 -pointsize 24 label:Anthony label_size.gif你还可以使用-gravity选项在更大的区域中确定(qudng)文本标签的位置。convert -background lightblue -fill blue -font Candice -size 165x70 -pointsize 24 -gravi

17、ty center label:Anthony label_gravity.gif当然,如果你不使用-size选项设置标签的尺寸,那么在“label:”生成的标签中就不会有多余的空间,将导致使用-gravity选项不会有任何效果。同时使用“-size”和“-pointsize”选项的问题是,文字可能会“溢出”指定图像的区域。convert -background lightblue -fill blue -font Candice -size 165x70 -pointsize 72 -gravity center label:Anthony label_overflow.gif在6.5.2-

18、4版本之前,IM将完全忽略-pointsize设置,如果命令中同时给定了-size设置。这将导致上面的图像文本根据最合适原则来自动调整尺寸(见下一组示例)。最合适的文本(wnbn)图像使用“label:”命令来生成指定尺寸(-size)图像的秘诀就是不要(byo)为标签文字指定-pointsize选项。如果发生了这种情况时,IM将会自由尝试和选择最适合图像尺寸的字体大小。也就是说绘制的文本将被进行调整,以匹配给定的图像尺寸!convert -background lightblue -fill blue -font Candice -size 165x70 label:Anthony labe

19、l_size_fit.gif正如你所看到的通过设置-size选项,你可以在图像的右侧或者下方(xi fn)得到一些额外的空间。当IM创建了一个最合适的标签时,它所使用的实际字号(pointsize)也将保存到“label:pointsize”图像属性中,以便你以后使用这些信息。这是在IM v6.6.2-7版本中新加入的,经过在IM论坛中对pointsize进行讨论决定的。你仍然可以通过使用-gravity选项在这些额外的空间中对文本标签的位置进行调整。convert -background lightblue -fill blue -font Candice -size 165x70 -gra

20、vity center label:Anthony label_size_gravity.gif当然,如果你不对标签进行-size设置,那么“label:”命令就不会生成多余的空间用来让-gravity选项进行位置调整,所以只有当你的图像指定了大小尺寸时,它才会有意义。现在有个最好的消息。如果-size选项设置中,你只给定了标签的宽度或者高度,那么(n me)字体将按照给定的维度被调整到最适合的尺寸,那些未指定的其它维度,将自动进行调整,以适应文本!convert -background lightblue -fill blue -font Candice -size 160 x label:

21、Anthony label_size_width.gif基本上,这意味着上述“label:”命令生成的图像将永远是160像素宽,并且设置为匹配这个宽度的最大字体。然后(rnhu)自动调整标签的高度以适应文本标签。如果指定的是高度而不是宽度,程序也会进行(jnxng)相应的操作。convert -background lightblue -fill blue -font Candice -size x40 label:Anthony label_size_height.gif这个标签的高度为40像素,由于未定义文本的pointsize,因此可以自动进行调整以适应这个高度,然后由于未定义图像宽度,

22、那么会自动调整为适合绘制文本尺寸的宽度。正如你所期望的。当然,在这种情况下并不会在图像中产生额外的空间,所以设置-gravity选项也不会产生效果。多行标签“label:”命令还可以用来生成多行的文本标签(在IM v6.2.5版本)。convert -background lightblue -fill blue -font Ravie -pointsize 20 label:ImageMagicknRules - OK! label_multiline.gif正如你所看到的“label:”命令(mng lng)中支持使用“n”来代表换行符。这意味着你可能要预先处理输入文本,以确保放置在命令行

23、上的数据中任何可能的转义字符都正确。详情请参阅下面介绍的文本特殊转义字符参数。-gravity选项同样可以影响“label:”命令生成标签(bioqin)的效果(IM v6.2.6版本),你可以用它来调整多行标签的位置。convert -background lightblue -fill blue -font Corsiva -pointsize 24 -gravity center label:ImageMagicknExamplesnby Anthony label_centered.gifIM的另一个(y )重要特性就是,它可以从一个文件中读取需要使用的文本数据。这可以通过给文件名添加

24、前缀字符“”,并将它作为字符串参数来实现。例如,下面我在这里创建一个标签,从我的工作站文件中提取信息。convert -background lightblue -fill blue label:/etc/motd label_file.gif你也可以从标准输入通道中读取标签的文本内容。例如在这里,我将引用发生器的输出转换成多行标签进行显示。mesgs ImageResolution |convert -background lightblue -fill blue label:- label_file_multiline.gif请注意,其中我使用的文件名只是一个“-”字符。这就表示该文件是从

25、标准输入读取的。记住你可以使用“文件名”格式将任何命令行字符串参数读入IM中。这包括下面介绍的所有其它文本输入方法。但是它只能用于替换整个字符串参数,而不是字符串参数的其中一部分。还要注意,在上面的例子中,有一个额外( wi)的空白行被添加到标签图像中了。这是由于输入文本文件中最后的换行符产生的空白行。除非你用某种方式从输入文件中(参见下面的“caption:”中介绍的方法来解决这个问题)删除最后的换行符,否则“label:”命令永远会从输入的文本文件中读入一个空行。大部分旧版本的IM(v6.2.5版本之前)并不支持处理多行标签。在这些版本中,多行文本会被连接在一起,形成一行单一的很长的文本。

26、垂直(chuzh)标签当然,你也可以(ky)通过在输入文字中添加换行符来实现。举例来说,在这里我选择了一个简单的单词,并在每一个字母之间添加了换行符,以创建一个居中的垂直文本。echo -n Vertical | sed s/./&/g; s/$/ | tr 012 |convert -background lightblue -fill blue -font Ravie -pointsize 24 -gravity center label:- label_vertical.gif请注意,“sed”命令在每一个字符后都添加“”字符,除了字符串的末尾处。然后“tr”命令使用了换行符来替换所有的

27、“”字符。它还假定了输入文本不采用换行符作为结束,这将导致结果图像在底部产生一个额外的空白区域。用户运行的Linux,因此使用GNU版本“sed”命令的用户就可以删除“tr”,直接在“sed”命令中用“n”取代“”,这样它就直接在每个字符之间插入新行了。也可以参考特殊属性 HYPERLINK /Usage/text/ l interline-spacing Inter-Line Spacing,用来调整字符之间的间距。标题包裹(bogu)文字的标签通过文本输入器生成的“caption:”图像,在很多方面就和“label:”完全一样,除了这个选项并不是(b shi)放大文本的尺寸,以适应指定的“

28、-size”设置,而是将任何不合适的很长一行文字包裹到“-size”指定的宽度区域中。-size选项设置是不可(bk)选的,但是你至少必须使用像素作为单位来指定图像的最大宽度。例如,这里是一行很长的文字标题,并且和指定的图像宽度并不匹配。convert -background lightblue -fill blue -font Corsiva -pointsize 36 -size 320 x caption:This is a very long caption line. caption.gif“caption:”生成的图像,同样会将“caption”图像属性的元数据设置到相同的字符串中

29、,让你在之后可以重新使用这些信息。所有常见的图像文件格式都会保存这些图像信息。默认情况下,所有文本都是左对齐的,但在IM v 6.2.0版本中,“caption:”命令也支持使用-gravity选项进行文本对齐设置。convert -background lightblue -fill blue -font Candice -pointsize 40 -size 320 x -gravity Center caption:ImageMagick Rules OK! caption_centered.gif如果你在-size选项中还提供了一个高度数值,不仅仅设置了宽度,那么图像的高度将会设置为那

30、个值。然后,你同样还可以使用-gravity进行设置,将文本垂直放置。convert -background lightblue -fill blue -font Gecko -pointsize 32 -size 320 x100 -gravity South caption:Captions at their height! caption_height.gif但是请注意,如果你对文本指定的pointsize并不适合放入-size设置的高度中,那么文字将从文本框中溢出(y ch)。当前的-gravity设置将会确定文字的哪一部分被切掉。例如,下面这个例子与前面(qin mian)的例子完全

31、相同,但是其中-size选项设置的尺寸对结果而言太小了。convert -background lightblue -fill blue -font Gecko -pointsize 32 -size 320 x60 -gravity South caption:Captions at their height! caption_height_toosmall.gif最佳匹配(ppi)标题IM v6.3.2版本中,如果你提供了最终图像的宽度和高度,但没有定义字体的pointsize(或者使用“+pointsize”命令关闭了pointsize设置),这时IM将会尝试自动调整字体的大小,以最好的

32、匹配你所要求的图像尺寸(-size)。例如,在这里我要求ImageMagick去覆盖一个面积相当大的区域。convert -background lightblue -fill blue -font Candice -size 320 x140 caption:This text is resized to best fill the space given. caption_filled.gif现在我们采用一个小得多的区域,并且使用相同(xin tn)的字体和文本字符串。convert -background lightblue -fill blue -font Candice -size

33、80 x110 caption:This text is resized to best fill the space given. caption_filled_sm.gif请注意,最后两个例子之间唯一的区别就是产生图像的-size选项设置。IM对文本和文字进行了最佳尺寸调整,来尝试(chngsh)和对指定的图像尺寸进行最好的填充匹配。它对于将未知位数的文本字符串放入一个指定的空间中非常有用,如果没有这个功能文本将会溢出区域的边界。但是,在内部它就相当于多次运行添加标题命令,直到IM找到匹配给定区域的最佳字体尺寸。换句话说,它往往比你如果提供(tgng)了一个指定的“-pointsize”设

34、置进行相同的操作要慢10倍或更多。标题与段落“caption:”图像命令中(如IM v6.2.5版本)支持使用shell转义符“n”(因此你需要使用双反斜线“”表示反斜杠字符),这表示一个新的行或段落。在这个版本之前绘制分开的段落必须单独多次使用“caption:”命令。convert -background lightblue -fill blue -font Ravie -pointsize 24 -size 360 x caption:Here I use caption to wordwrap.nTwo separate lines. caption_multi_line.gif你也可

35、以从一个文件或者标志输入(从先前的管道命令)中读入需要绘制的文本内容,通过使用“”作为文件名前缀,正如我们在“label:”命令中一样的用法。mesgs FilePrivate |convert -background lightblue -fill blue -pointsize 12 -size 320 x caption:- caption_file.gif正如你所看到的,在输入文本中的换行符(如IM v6.2.5版本)将被视为段落分隔符。这包括输入文件中任何最后的换行符。当然“label:”命令并不会对文字行进行换行,而是保留(boli)它们。如果你确实需要一个文件被作为一个段落进行处

36、理,那么你必须将换行符替换为空格字符,这样(zhyng)你所有的文字就是一行了。例如,在这里我们采用了相同的文字内容,但用空格替代换行符,然后将每个单词之间的连续多个空格字符替换为一个空格。mesgs FilePrivate | tr 012 | sed s/ */ /g |convert -background lightblue -fill blue -pointsize 12 -size 320 x caption:- caption_one_line.gif正如你所看到的,这个方法(fngf)工作得更好。但是,通常你想要的是将空白行作为一个段落符来对待。这意味着你需要删除所有换行符,除

37、了那些空白行中的。这里有一个特殊的“sed”命令可以将这样的文本转换成“caption:”所需的格式。在这种情况下,文本将是“convert”联机帮助页的第一页。man convert | col -b | expand | sed /$/d; :loop y/n/ /; N; /n$/! b loop; s/ */ /g; s/ / |head -n 7 | convert -size 400 x caption:- caption_manual.gif文本属性通常可以影响文本处理效果的设置包括:“-font”、“-fill”、“-pointsize”、“-size”和“-gravity”。

38、我们在上面的介绍中已经详细讲解了其中许多控制属性。但是实际上还有许多不经常(jngchng)使用的控制属性,并且它们通常不会影响“label:”和“caption:” 生成的文字图像。比如IM v6.3.2版本中,还可以在“label:”或“caption:”命令中使用“-stroke”、“-strokewidth”和“-undercolor”设置(shzh)。例如在这里,我使用了很多不同的设置来控制IM文字图像的渲染属性。convert -background white -fill dodgerblue -font Candice -strokewidth 2 -stroke blue -

39、undercolor lightblue -size 165x70 -gravity center label:Anthony label_color.gif了解更多这些选项的细节信息,请参看下面的undercolor区域介绍,以及绘图部分(b fen)关于-stroke和-strokewidth的介绍。现在,你在“label:”或“caption:”命令中不能使用平铺拼接图像定义选项,如“-tile”、“-fill”、“-background”和“-origin”,而只可以使用纯色背景。如果你要尝试这种做,最终将会产生一个未定义颜色(黑色)。字号、密度和实际字体尺寸像素指的显示屏或图像上的点

40、,这就是IM工作的单位。另一方面,图像(t xin)将显示为指定的分辨率(指定为点数每英寸(dpi)或像素每英寸(ppi)。由于图像的分辨率将会影响其它方案将图像显示到一个指定尺寸媒体中的方法。例如:它将会影响图像在现实世界中的物理尺寸。图像的分辨率(密度或dpi)与图像的像素尺寸、图像所占据的内存或磁盘空间无关。同时,在一般情况下,它也与IM大多数的图像操作选项无关。因此,对于ImageMagick而言,分辨率只是一组存储在图像中的数字,并且通常被忽略。其中唯一需要使用图像分辨率或密度的地方就是IM处理字体和将矢量格式图像如PostScript、PDF或MWF转换为光栅(gungshn)图像

41、格式的时候。-density选项设置会告诉IM在输出设备上每英寸范围内显示了多少个像素点(PPI),它可以在接下来的操作中用来(yn li)调整生成的图像,并与字体尺寸相匹配。例如在默认情况下,IM的-density选项设置为72 ppi,这是图像显示在监视器或网页上时的一个典型设置。由于字体大小被指定为“点”(使用-pointsize选项),并且根据定义1点等于1/72英寸,所以72点的字体显示出来的文字尺寸大约是1英寸高。convert -pointsize 72 label:Hello pointsize.gif然而,大多数现代化的显示器拥有比这更好的分辨率,通常介于90至120像素每英

42、寸(PPI)之间。convert -density 90 -pointsize 72 label:Hello density.gif上述命令应该产生一个标签,它在90 dpi的显示器上是1英寸高,在我的显示器上就是这样的!你可以通过测量屏幕上这张图像的高度,来检查你的显示器分辨率。由于每英寸中像素的个数越多,所绘制的字体也自然较大(根据图像中的像素数目),从而产生出较大的图像。不同的图像处理程序往往有不同的默认密度设置,这就可能会导致使用(shyng)不同图像程序绘制的字体也不完全相同,即使它们都使用相同的point尺寸。请注意,-pointsize选项实际上表示字体的分离边线(即是它的绘图区

43、域实际高度),而并非指绘制字母的实际高度!由于不同的字体在相同(xin tn)的-pointsize和密度设置时,也可能会显示得大一些或小一些。所以实际上只有字体的分离边线是相同的,其它任何东西都是依赖于字体类型和字体设计的。作为一个默认的-density为72dpi(其中1点=1像素)的情况中,12点的字体,两行文字的基线(jxin)应该相距12个像素。需要注意的是“label:”命令生成图像的高度是基于图像绘制区域或边界框的,它通常就是字体的行间距和pointsize。但也并非总是如此,因为仅仅进行文本行的垂直连接实际上会造成不正确的字体处理!某些字体甚至可能会远远超出正常分离边界的界限,

44、大量延伸到高于或低于通常字体的行间空白区域。对于手写脚本的字体尤其如此。字体的外观同样也受到字体“-pointsize”和“-density”设置的影响。将字体的pointsize翻倍(“-pointsize24”),也会产生和将字体的密度或分辨率翻倍同样尺寸的字体。但是由于字体是以一种特殊的方式进行设计的,因此在更大point设置下字体中的线的粗细可能并不会发生大的变化。这就是说较大的字体尺寸只会产生细微的不同。但是如果你对密度选项翻倍(“-density 144”),那么一个12点的字体将会绘制出原来双倍的密度,应该还是和原来的12点字体非常相似,只是在较大密度下可以绘制更好更平滑的边缘效

45、果。但是,在非常低的分辨率下,像素的物理尺寸限制同样可能影响字体的外观。这意味着细的线条在较低的密度下可能会变粗。“density”和“pointsize”之间的关系始终是一个非常复杂的问题,只有专业的字体图形设计师可以完全理解,让他们能正确设计和处理字体。我认为这是一个TrueType字体渲染的特性。TrueType字形不仅是一组曲线,它可能包含多层次的细节和说明,用来根据输出像素尺寸调整点坐标,并且对于较小像素尺寸显示更加清晰。正因为如此,较小的文字看起来和缩小的大尺寸文本并不一样(更加清晰,并且人们可以看出来)。未来的例子:在相同的像素尺寸下,字体的密度(density)和点(point

46、)也可能不同。基本上,增加这些因素并同时减少相同数量的其它因素可能不会产生相同的结果。特别是关于线条的粗细和字体的整体风格。你最好将你所进行的工作调整到正确的配置。使用-density选项可以在输出设备上缩放字体,或者稍后进行字体尺寸调整时,使用-pointsize选项进行正常的字体大小变化。如果你想知道更多关于(guny)字体的信息,可以看看这个文档 HYPERLINK /typography/otspec/TTCH01.htm TrueType Fundamentals (PDF),我发现(fxin)它非常有趣。标签图像(t xin)边界当使用一些外来的字体时,字体可以使用扩展字符,在过去

47、的IM版本中创建这些字体的标签会出现很多的麻烦。因为这些文本会溢出我们提供的画布。例如这里在“LokiCola”中的两个大写字母让人联想到某著名的饮料品牌。convert -background lightblue -fill blue -font LokiCola -pointsize 64 label:HC label_overflow_font.gif正如你所看到的,IM成功地将这个字体包含到标签中,而没有切割字体的前面或尾部图形。在IM v6.3.2版本之前,在上面的例子中“label:”命令会切割掉“H”字母的前面的部分和两个字母的尾部。这个问题存在的原因是,因为字体的字形或字母的描

48、述将会绘制指定字母定义边界以外的部分,允许它们重叠(通常是高于或低于)在其它字符的字体上面。这实际上是字体本身设计和定义方式的问题,并不是IM造成的错误,尽管IM现在可以根据用户的最佳利益来处理这些奇怪的情况。但是在其它情况下这仍然是一个问题,由于多行文本的相互作用,它并不能被根本解决。更多相关信息,请参阅下面的溢出边界的例子,以得到更加精确的描述。Unicode或UTF8格式文本这种向IM提供字符串参数的方法是非常重要的,因为它允许你进行使用命令行通常很难完成的事情。可以专门处理“Unicode文本”,或使用字符代码来选择指定的字符。现在,如果你需要在命令或脚本中键入Unicode字符,你可

49、以直接使用它们。convert -background lightblue -fill blue -pointsize 32 label: “ ” x label_i8n.gif然而,只有少数人有合适的键盘或编辑器可以正确实现Unicode字符的输入编辑。即使你不能直接键入Unicode字符,一个简单的解决方案就是从一些现有的UTF-8文本文件或网页中将所需的字符进行复制粘贴操作(cozu)。就像我这样!如果已经生成了用于绘制的UTF-8文本(wnbn),你可以使用“文件名”的方法从文件中直接读取。例如,我在这里使用UTF-8编码的中文文本文件创建了一个中文标签(在文件的最后没有换行符)。co

50、nvert -background lightblue -fill blue -pointsize 48 -font ZenKaiUni label:chinese_words.utf8 label_utf8.gif在上面例子中使用的是一种特殊的字体,完全支持所有中文字形的定义,如Fedora Linux系统中的“SimSun”字体(或在字体文件“gkai00mp.ttf”中)、“ZenKaiUni”字体(文件“ukai.ttf”中)或“ShanHeiSunUni”字体(在任何的“uming.ttf”或“zysong.ttf”或“bsmi00lp.ttf”文件中)。请注意,Windows系统中

51、的字体“Mincho”(在后面的例子中)同样也定义了许多的中文字形,但不是很完全。如果你在上面的例子中使用它,可能会得到一些不确定的问号字形。可以使用特殊的脚本“imagick_type_gen”来查找并提取字体的专有名称,并将这种字体添加到ImageMagick的“type.xml”配置文件中。我们还可以从Unicode字符代码来生成UTF-8字符串,使用GNU中的“printf”程序(Linux系统中)将Unicode字符代码转换为具体的UTF-8编码字符串,在这种情况下,需要使用前引号和后引号进行适当的排版(同样在UTF-8输入(shr)中没有最后的换行符)。例如,这里我使用Unicod

52、e字符代码产生了一个UTF-8文本,并使用管道命令读入到程序(使用“-”从标准输入“stdin”中读取),而不是从实际文件中读入。env LC_CTYPE=en_AU.utf8 printf u2018singleu2019 - u201Cdoubleu201D | convert -background lightblue -fill blue -pointsize 36 label:- label_quotes.gif在其它系统中(如Mac OSX和Windows),你可以使用Perl的“printf”方法从Unicode字符代码中输出(shch)UTF-8编码的字符串。perl -e b

53、inmode(STDOUT, :utf8); print x201CUnicode x2018x263Ax2019 Pleasex201D; |convert -background lightblue -fill blue -pointsize 36 label:- label_unifun.gif需要了解更多的信息,或者查找各种语言(yyn)和符号的Unicode字符代码,请参阅Unicode字符代码图表 HYPERLINK /charts/ Unicode Character Code Charts。现在(xinzi)你不仅可以使用Unicode字符来绘制各种国际字符,并且使用合适的字体

54、,你还可以使用里面定义的特殊“符号”图形。其中最有名的就是“dingbats”符号字体。这种字体已经被非常广泛的使用,并且现在被收录为标准Unicode字体集的一部分。例如,我在这里使用一个自己编写的特殊“ HYPERLINK /Usage/scripts/graphics_utf graphics_utf”shell脚本,提取了“dingbats”Unicode符号区域中的前24个字符,来生成一个Unicode字符的UTF-8文本块。graphics_utf -N 2701 2718 |convert -font Mincho -pointsize 32 label:- label_ding

55、bats.gif上面显示的问号对应的字符表示它们没有在任何Unicode或windows中的“Mincho”字体中进行过定义。更特别的是,现在在Unicode中呈现出的原始“dingbats”符号中的一部分,使用的是另一种Unicode字符编码,而不是预期的“dingbats”编码。参见dingbats Unicode的规格表 HYPERLINK /charts/PDF/U2700.pdf Dingbats Unicode Specification Chart获得更详细的信息,查找现在替代那些丢失的“dingbats”字符的正确Unicode字符。除了问号,还有许多字体也会给这些未定义的字符

56、,仅仅打印一个字符框或空白区域。如果在结果图像中你发现太多这样的字符,或在你的输出中缺少了字符,你应该考虑使用不同的字体。作为大量的Unicode字符字体中的一部分还可以选用其它很多符号设置包括:Tolkan文字符号、数学符号、罗马数字、箭头和技术符号等。这是一个需要探索的非常大的集合,我们的“ HYPERLINK /Usage/scripts/graphics_utf graphics_utf”shell脚本可以帮助你发掘它们。这里是微软“Mincho”字体可以渲染的Unicode字符的另一个例子(l zi)。在杂项符号章节 HYPERLINK /charts/PDF/U2600.pdf M

57、iscellaneous Symbols中的一个(y )例子。graphics_utf -N 2620 2630 |convert -font Mincho -pointsize 40 label:- label_misc.gif在DOS脚本中使用Unicode字符必须比UNIX和Linux下更困难。在这种系统环境中使用Unicode的特别(tbi)说明由Wolfgang Hugemann提供 HYPERLINK /Usage/windows/ l character_encoding Windows Character Encoding。符号字体人们更普遍使用的查询特殊文本图像的方法,就是使

58、用特殊的“符号字体”。它们比完整的较大的Unicode字体要小很多,因为它们仅仅将标准的ASCII字符(字母和数字)更换为一组不同的具体形状和图像,尽管有时(很少)它们在拉丁元字符区域中有更多的符号。“dingbats”字体符号就是以这种方式开始的,但正如上面所提到的,现在它们是Unicode字符集的一部分了。例如,我比较喜欢使用的一个符号就来自“WebDings”字体。它是一个相当漂亮的“弯曲的心脏”的图标,其实这是在那种字体定义中的正常“Y”字符的替代图像。convert -size 20 x20 -gravity center -font WebDings label:Y label_h

59、eart_20.gifconvert -size 40 x40 -gravity center -font WebDings label:Y label_heart_40.gifconvert -size 60 x60 -gravity center -font WebDings label:Y label_heart_60.gifconvert -size 80 x80 -gravity center -font WebDings label:Y label_heart_80.gif需要记住的最重要的是,所有的TrueType字体实际上都是一个特殊类型的矢量图像格式 HYPERLINK /U

60、sage/formats/ l vector Vector Image Format。字体中包含有多张图像(每个字符都是一张)。因为它们是矢量图像,这就意味着字体应该允许你绘制(-draw)几乎所有尺寸(规模)的任何一个字符、形状或符号,使用“-size”、“-pointsize”和“-density”选项进行控制。正如你在上面可以看到的,“弯曲的心脏”图像可以呈现在几乎(jh)任何我需要的尺寸中。有些字体是非常(fichng)专业的。例如,你可以从 HYPERLINK /fonts/free/ IDAutomation中获得(hud)一个被称为“IDAutomationHC39M.ttf”的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论