Linux 技巧: 从命令行创建像素标尺
现在我们有了一张画布,让我们绘制一些标记来显示沿着标尺的不同点。72 ppi(像素/每英寸)是基于 Web 的图形的标准,因此让我们将我们的第一个标记设置为 72 像素并使它从图像底部扩展 30 像素。另外,让我们用黑色填充这个线条,并为其指定两个端点。
?清单 2. 将一根线条添加到这张画布?
图 2 展示了我们的新图像,图像上面绘制了一条线。
图 2. 带有一根垂直线的画布,线条距画布左边 72 像素在这个标尺上绘制每个线条都重复上述操作,这很乏味,因此让我们使用
?清单 3. 在画布上每隔 72 像素添加一条线seq
命令来生成一个相距 72 像素的水平偏移的列表,同时使用一个for
循环来在这个标尺上绘制主线条(如清单 3 所示)。?
注意,我们使用了两个命令替代来为绘制操作生成单独的线条规范。我们还在 0 位置 —— 左侧边缘 —— 放置了一个标记。现在,图 3 看起来更像一个标尺了。
?图 3. 从左边缘起每 72 像素一条垂直线的画布?对更多线条编写脚本此时,我们的命令行变得有点复杂了,但是我们的标尺上仍然只有主要标记。现在是时候编写脚本了。在清单 4 中,我们使用 shell 算法和
?清单 4. 将一个完整的标记集添加到这个标尺for
循环在已经有的标记的中间放置一个 20 像素的标记,并在这些较长的标记之间每隔 6 像素放置一些 10 像素的标记。为完成本文的任务,我们将调用脚本buildruler.sh
并将它放置在我们的工作目录中。?
注意,我们添加了两个参数,以便用户可以更改标尺的名称并指定其长度。现在,我们的标尺看起来就像图 4 一样。这个标尺是使用命令
?图 4. 带有完整的标记集的标尺,标记之间相距 6 像素?添加文本./buildruler.sh?ruler4.gif
生成的。?
现在,我们的标尺如图 5 所示。
?图 5. 带有完整标记集和标签的标尺?定位文本那么,我们如何知道文本应该偏移多少,应该放置在距离顶部多远的位置?想当然的答案可能是:试验和猜测,但这不是一个好办法。
?
为了更好地放置文本,我们需要知道包含文本的方框有多大。但这取决于字体,字体是否成比例,以及其他一些不容易计算的因素。幸运的是,我们可以以同样的方法使用 ImageMagick 创建一个画布,我们还能创建一个 label。我们将创建一个标题 Pixel Ruler 并将它设置为 36 点的字体。这个标签作为一个图像创建,我们可以使用
?清单 6. 创建一个标题并测量其大小identify
命令来确定其大小(如清单 6 所示)。?
我将文本设置为海军蓝并添加一个淡紫色的背景颜色,以便这个图像从这个页面背景中凸显出来。但是,不管是否使用背景颜色,得到的图像的大小都相同。生成的标签图像如图 6 所示。
?
图 6. 标签图像比编写一个文件甚至更好的是,我们可以使用 ImageMagick INFO 类确定关于文本的更多信息,比如基线的位置。我们将文本写到一张足够大的画布上,然后沿着文本的边缘修剪画布(如清单 7 所示)。
?清单 7. 使用 INFO 图像类确定字体信息现在我们已经知道了这个标签的尺寸,让我们将基线放置在距离图像顶部 40 像素的位置并使其水平居中。我们的最终脚本如清单 8 所示并可供 下载。
?清单 8. 最终脚本?
最终的标尺如图 8 所示。
?图 8. 带有标题的最终标尺对于那些没有艺术技巧的人来说,这算得上一种不错的方法。
?一个实践示例如果图像被缩进 — 比如在列表中 — developerWorks 上允许的最大宽度就相应减小。因此,您可以使用这些方便的标尺来检查随文章一起提交的图像。
通过本文的简单实践,您看到了使用 ImageMagick 通过脚本编写包含线条和文本的图像的一些基本技巧。您将在我们的文章 “通过命令行处理图形 -- 使用 ImageMagick 进行翻转、缩放大小、旋转以及更多操作” 和 “通过命令行进一步处理图形 -- 在 Linux 上使用 ImageMagick 的提示与技巧” 中发现更多技巧。您也可以在 ImageMagick 的主页上找到更多示例,从 参考资料 部分获取相关链接。
?
本 文中的脚本并不是无懈可击的。例如,对于长度是不是对一个有意义的标尺足够大的正数值,或者指定的文件是不是 ImageMagick 的有效图像文件类型,我们没有进行验证。您可能还会发现其他问题。例如,标尺标签可能像图 10 中那样被截断,这是我们的脚本没有考虑的一个问题。
?
您还可以任意添加多个参数,例如,尝试添加颜色或标尺高度参数。
?
尽管这个技巧主要关注在 Linux 上使用 ImageMagick,ImageMagick 也可用于 Windows 等其他平台上。尝试在您喜欢的平台上使用脚本工具实践这些技巧。
来源: http://www.ibm.com/developerworks/cn/linux/l-pixelruler/index.html
?