【问题标题】:Clipping with a "buffer" around text in Postscript在 Postscript 中的文本周围使用“缓冲区”进行剪辑
【发布时间】:2018-11-07 16:50:28
【问题描述】:

(这是从另一个角度接近this question。)

我正在绘制地图。这些可以被视为具有三层:在底部,有代表森林和水等事物的纯色,以及用于指示分类的道路上的“光晕”等事物的低对比度线条。然后是高对比度的线条,例如代表道路中心线的黑线和代表路径的黑色虚线。最后,还有标签,通常是黑色的。

我希望黑线在文本周围有间隙,底层的颜色和线条可以透过这些间隙。

在 SVG 中,这可以通过在线条上设置遮罩并将具有非常宽的笔划(以创建间隙)的文本绘制到该遮罩中来完成。

除了编写我自己的字体渲染器将“缓冲”文本渲染为贝塞尔路径之外,有没有办法在 Postscript 中表达这一点?我可以通过在页面周围绘制一个矩形、charpath:ing 文本然后执行 eoclip 来创建一个一直到文本边缘的剪辑蒙版,但是如何获取缓冲区?

【问题讨论】:

    标签: postscript clipping


    【解决方案1】:

    PostScrtipt 没有任何透明度的概念(以某些特殊情况为模,例如套印、图像蒙版和色度键控图像)。 PostScript 程序也没有标准的方法来影响已经渲染的任何东西,除了通过绘制它。

    如果您的意思是从页面缓冲区取回像素以进行自己的合成,则不能“获取缓冲区”。

    我能看到的唯一方法是按照您的意愿绘制黑色线条,其中的间隙已经到位。显然,这意味着将智能从 PostScript 中移出并将其放入您自己的应用程序中,您需要知道,当您绘制黑线时,文本将在哪里,以便您可以在适当的位置留下线条的间隙。

    【讨论】:

    • 通过“获取缓冲区”,我的意思是“如何在文本周围创建间隙('缓冲区')”。但这并不会真正影响您的回答;我必须自己“渲染”文本,要么从中创建剪辑路径,要么自己剪辑线条。 :-(
    • 如果您在绘制黑线之前知道它是什么以及它的去向,您可以对文本进行预处理。使用 charpath 和 pathbbox 很容易找到包围一段文本的矩形区域(假设您使用的是简单的显示而不是更复杂的东西)。然后,您可以通过附加每个矩形来组装剪切路径。然后画线,然后放置真实的文本。但是是的,因为 PostScript 有一个不透明的成像模型,所以你必须自己做。您可以改用 PDF,它具有透明的成像模型。
    • 是的,剪裁成矩形应该相当简单,但我想得到这张地图中穿过“Sollentuna”中“u”的棕色道路的效果:kso.etjanster.lantmateriet.se/…。也许我得看看 PDF……
    • 丑陋的hack:1.画背景; 2、画线; 3. (text) false charpath 4 setlinewidth strokepath clip ; 5.再次绘制背景(重绘本应不可见的线条); 6. 绘制文字。
    • 好吧,你不必使用矩形,你可以简单地使用 charpath,但这会导致 非常 复杂的剪辑路径,处理起来会非常缓慢。正如上面 Ture 所暗示的那样,您可能无论如何都需要 charpath 和 strokepath(具有宽线宽),然后将其用作剪辑路径。
    猜你喜欢
    • 2011-08-14
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-22
    相关资源
    最近更新 更多