标签: pango

如何使用pycairo创建字母间距属性?

我正在使用Pango + Cairo(通过GObject)使用python3.7渲染文本,并想通过创建属性并将该属性附加到我的pango布局来设置字母间距

在pango的gnome文档中,我可以看到应该有一个名为pango_attr_letter_spacing_new(自v1.6起)的函数。但是,如果运行,则会Pango.attr_letter_spacing_new出现错误:

AttributeError: 'gi.repository.Pango' object has no attribute 'attr_letter_spacing_new'
Run Code Online (Sandbox Code Playgroud)

感觉有点奇怪,因为我可以使用pango_attr_type_get_name从v1.22开始才应该提供的。

我可以通过使用标记来解决,<span letter_spacing="1234">但是我不想走这条路。

最小的“工作”示例

AttributeError: 'gi.repository.Pango' object has no attribute 'attr_letter_spacing_new'
Run Code Online (Sandbox Code Playgroud)

手动创建LetterSpacing属性

我已经能够找到enum值Pango.AttrType.LETTER_SPACING,这使我可以执行以下操作:

c = Pango.AttrClass()
c.type = Pango.AttrType.LETTER_SPACING
a = Pango.Attribute()
a.init(c)
Run Code Online (Sandbox Code Playgroud)

但是,我一直无法找到一种方法来设置它的值,这让我觉得这是错误的处理方法:|

将此插入到中Pango.AttrList,给了一个错误(不足为奇),并且下次我对Pango进行操作时使python进程出现段错误:

** (process:17183): WARNING **: 12:00:56.985: (gi/pygi-struct-marshal.c:287):pygi_arg_struct_from_py_marshal: runtime check failed: (g_type_is_a (g_type, G_TYPE_VARIANT) || !is_pointer || transfer == GI_TRANSFER_NOTHING)
Run Code Online (Sandbox Code Playgroud)

其他线索

..可悲的是无处可去:(

python pango pygobject

9
推荐指数
1
解决办法
167
查看次数

重绘标签时,解决GTK中的大内存泄漏问题

我正在使用最新版本的PyGTK All-in-One安装程序(2.24.2)用于Python 2.7,其中包括Cairo 1.10.8,Pango 1.29.4,PyGTK 2.24.0和PyGobject 2.28.3(我认为) .

以下代码泄漏~55 MB的内存:

import gtk

window = gtk.Window()
label = gtk.Label()
window.add(label)
window.show_all()
for _ in range(100000):
    label.set_markup('Leaking memory!')
    while gtk.events_pending():
        gtk.main_iteration()
Run Code Online (Sandbox Code Playgroud)

注意:for循环在我的测试脚本中,所以我可以看到任务管理器中的内存消耗增加.它本质上也是我真实应用程序中发生的事情,除了标签文本每秒至少更改一次,而不是每次都重写相同的文本.

问题是label.set_markup(),每次呼叫泄漏大约0.5kB,所以我怀疑问题出在GTK或Cairo的某个地方.正如评论者指出的那样,这可能是这个错误(685959).

我尝试使用objgraph来查看是否有任何额外的Python对象与调用次数成比例显示,gtk.Label.set_markup()但没有多余的对象.接下来,调用gc.collect()没有帮助,我试着确定.Python似乎并不知道负责内存消耗的对象.

我如何找到这个内存泄漏,和/或解决它?我需要使用标记来为这个应用程序设置一些文本的样式,但我尝试使用它gtk.Label.set_text()作为一种解决方法,它也会泄漏内存.

我应该注意到这个应用程序针对Windows,因此使用PyGObject来获取GTK 3不是一个选项 - 在Windows上仍然没有GObject内省.

python gtk pygtk pango

8
推荐指数
1
解决办法
1063
查看次数

如何修复在 Linux/Fedora 31 上的 R 中未正确显示的度数符号

我制作的任何地图:

ggplot() + geom_sf()

生成预期的地图,但未正确显示度数符号,如下图所示。

带有错误度数符号的地图一角

这个答案中给出的答案 -地图轴标签中的度数符号不正确- 没有帮助,当我看到不同的标志时,我发布了一个单独的问题。

更改字体无济于事。

我还尝试sf在一个单独的项目中从 Github安装当前版本的(0.9) renv,但结果相同。

我在 Linux 上,Fedora 31。

复制:

library("ggplot2")
library("sf")
nc <- st_read(system.file("shape/nc.shp", package="sf"))

ggplot() +
  geom_sf(data = nc)
Run Code Online (Sandbox Code Playgroud)

2019-03-15 更新

该问题并非特定于 ggplot/geom_sf;正如评论中所建议的,我遇到了同样的问题plot.new(); text(0.5,0.5, bquote(120*degree*N), cex=5) 错误度数符号的附加示例

另外,澄清一下,我没有在?X11(). 如果我在我的终端中运行fc-match Symbol,我会得到:

StandardSymbolsPS.t1:“标准符号 PS”“常规”

更新 2019-03-19

在全新的 Fedora 31 和 Fedora 32 beta 安装中得到确认。可能是 Fedora 的问题。

我尝试使用不同的语言环境(包括例如“en_US.UTF-8”或“German”)和设备(例如cairo_pdf(), cairo_ps()),结果相同。

X11.options() 将“cairo”显示为类型(将其更改为 Xlib,或者 dbcairo 不会更改结果)。

使用TestChars()dww在下面的答案中提出的函数显示如下: 测试

但是,如果我用 knitr 编织到 pdf,我会得到大多数符号,包括°。

从pdf测试

如果我编织到 …

r pango plotmath pangocairo r-sf

8
推荐指数
2
解决办法
1161
查看次数

Graphviz - 无法加载gvplugin_pango.dll

我试图在Windows中从CLion运行graphviz作为库.我花了很长时间才走到这一步,我希望这是最后的障碍.当我运行程序时,我看到以下警告,没有图表

Warning: Could not load "C:\Program Files (x86)\Graphviz2.38\bin\gvplugin_pango.dll" - can't open the module
Run Code Online (Sandbox Code Playgroud)

我正在运行CLion,MinGW 3.22作为工具链.CmakeLists和main.c如下.不幸的是我无法注册graphviz论坛所以我希望这里有人可能有一些建议.到目前为止我已经尝试过 -

  • 安装和使用mingw-64
  • 安装旧版GraphViz(2.28,当前为2.38)
  • 在cmakelists.txt中包含gvplugin_pango库
  • 更改Graphviz文件夹的权限以允许完全访问Everyone,测试点-c并正常工作
  • 设置GVBINDIR env变量以明确指向2.38安装
  • 尝试在Cmakelists.txt中设置m32(不是100%我正确地做了这个)

的CMakeLists.txt

cmake_minimum_required(VERSION 3.6)
project(Learning)

set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}")
set(GRAPHVIZ_INCLUDE_DIR "C:/Program Files (x86)/Graphviz2.38/include/graphviz")
set(GRAPHVIZ_LIB_DIR "C:/Program Files (x86)/Graphviz2.38/lib/release/lib")

set(SOURCE_FILES main.c)
include_directories("${GRAPHVIZ_INCLUDE_DIR}")
add_executable(Learning ${SOURCE_FILES})

find_library(CGRAPH_LIBRARY cgraph HINTS "${GRAPHVIZ_LIB_DIR}" REQUIRED)
find_library(GVC_LIBRARY gvc HINTS "${GRAPHVIZ_LIB_DIR}" REQUIRED)
target_link_libraries( Learning ${CGRAPH_LIBRARY} ${GVC_LIBRARY} )
Run Code Online (Sandbox Code Playgroud)

MAIN.C

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <gvc.h>
#include <cgraph.h>

int main() {
    Agraph_t *graph;
    Agnode_t *nodeA, *nodeB;
    Agedge_t *edge1;
    Agsym_t *symbol1; …
Run Code Online (Sandbox Code Playgroud)

mingw pango graphviz clion

7
推荐指数
1
解决办法
357
查看次数

如何在 pyCairo + Pango 中进行文本换行?

我需要 pyCairo 做的是:

  • 生成大小为 100x100 的图像,其中包含一些文本和来自文件系统的图像作为背景
  • 文本应该在一个大小为 20x20 的文本环绕框内,左下角位于 (40,40)。
  • 保存这张图片

python pango word-wrap cairo

6
推荐指数
1
解决办法
1855
查看次数

为Android NDK构建Pango Cairo

我发现有人在Pango Cairo上移植了Android NDK(博客文章源代码)。但是,我在编译他的示例项目方面还没有成功。有没有人设法做到这一点,并且可以告诉我我做错了什么?

到目前为止,这是我尝试过的:

  • git clone-递归http://dev.laptop.org/git/users/cscott/android-libs/
  • git由于某种原因找不到pixman,因此git clone http://cgit.freedesktop.org/pixman/并移至android-libs / jni / pixman
  • android-libs / jni /的内容复制到android-libs / examples / java-bitmap / jni(不确定要保留哪个Android.mk?)
  • java-bitmap / jni / Makefile.devel重命名为Makefile
  • 如下编辑了Java位图/ jni / Makefile:NDK = / cygdrive / f / android-ndk-r8b TOOLCHAIN = $(NDK)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin
  • 试图在java-bitmap / jni中运行make

我收到以下错误:

checking for arm-linux-eabi-gcc... arm-linux-androideabi-gcc --sysroot /cygdrive/f/android-ndk-r8b/platforms/android-9/arch-arm -fpic -ffunction-sections -funwind-tables -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__  -mfpu=vfp …
Run Code Online (Sandbox Code Playgroud)

android pango cairo android-ndk pangocairo

6
推荐指数
1
解决办法
2474
查看次数

安装Pango-1.30.1的问题

我在Ubuntu 12.04平台上安装Pango-1.30时遇到了问题.在./configure步骤中,我收到一条消息"无法启用任何Freetype,X11,Cairo或Win32后端.必须至少有一个后端来构建Pango".但是,我已经构建并安装了Freetype和X11,它们位于/ usr/bin中.如何通知./configure从哪里获取它们?

谢谢,Mark Allyn

pango cairo

6
推荐指数
1
解决办法
8264
查看次数

什么是使用 Pango 将文本渲染为使用 FreeType 字体的图像的简单示例?

我想使用 Pango 呈现文本,但找不到不使用 Cairo 的示例代码。有人可以给我一个使用 FreeType 后端的 Pango 用法的简单示例吗?这就是我认为它应该大致工作的方式,但是正如您在代码中看到的那样,有些事情我还不明白。

// context and font stuff
PangoFontMap *fontmap = pango_ft2_font_map_new();
// do I have to initialize the fontmap?
PangoContext *context = pango_font_map_create_context(fontmap);
PangoFontDescription *desc = pango_font_description_new();
pango_font_description_set_style(desc, PANGO_STYLE_NORMAL); // not bold or italic
pango_font_description_set_size(desc, 12); // 12pt font
PangoFont *font = pango_context_load_font(context, desc);

// target bitmap
FT_Bitmap bitmap;
// how do I say how big the bitmap should be? write it into the struct?
FT_Bitmap_New(&bitmap);

// text
char *text = "Hello World"; …
Run Code Online (Sandbox Code Playgroud)

c pango freetype text-rendering

6
推荐指数
1
解决办法
4746
查看次数

Pango + Cairo; 是否有现成的方法来处理文本中的<img>样式标签?

Pango语法支持一些仅文本标记.据我所知,这并没有延伸到嵌入图像.

环顾四周,我找不到现有实施的方式,但我之前没有做过pango + cairo工作,所以我可能会错过明显的社区.

据我所知,合理的方法是分析字符串,拉出任何标签,创建cairo图像,然后相应地修改它们周围的pango布局.

它似乎也是某人之前可能做过的事情.

我特意在这些问题上寻找答案:

  1. pango + cairo已经解决了这个问题,我误解了文档吗?
  2. 以前做过这样的事情,参考在哪里?
  3. 这是一种合理的方法,还是我应该尝试别的什么,什么?

(另请注意我使用红宝石,这可能会影响我的选择)

ruby pango cairo

6
推荐指数
1
解决办法
575
查看次数

Pango 标记语言中的文本对齐

像这样写一个标记

<span font-desc="Bold 40" foreground="blue" size="x-large">P <b>S</b> </span>

在以下链接的帮助下,上述标记可以作为 Gstreamer 的文本属性 提供给 textoverlay 元素。我没有找到对齐文本的方法。例如,如果我想在中心、左侧或右侧添加文本。我怎样才能做到这一点。

html pango alignment gstreamer

6
推荐指数
0
解决办法
1867
查看次数