我需要帮助可视化Wand中的字体指标

时间:2018-01-01 13:08:13

标签: python typography wand

通常当我使用 private void loadRecyclerViewData() { databaseReference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if (posts.size() > 0) { posts.clear(); } for (DataSnapshot ds : dataSnapshot.getChildren()) { Post post = ds.getValue(Post.class); //Getting a specific user's information (nickname purposes) posts.add(0, post); } adapter.notifyDataSetChanged(); } @Override public void onCancelled(DatabaseError databaseError) { } }); } 在Wand中写一个句子时,字母间距会被处理掉,但是我需要一次写一个字母来构建文本动画的帧。这样做的问题在于,通过draw.text移动左侧偏移量(这里是draw.text命令的documentation),由text_width给出,字母间距非常大。< / p>

我试图使用提供的其他指标来尝试更好地计算移动偏移的位置以获得更好的字母间距,但是我很难理解它们的含义。

指标是:

  • draw.get_font_metrics
  • character_width
  • character_height
  • character_width
  • ascender
  • descender
  • text_width
  • text_height
  • maximum_horizontal_advance
  • bounding box: x1
  • bounding box: y1
  • bounding box: x2
  • bounding box: y2
  • origin: x

以下是包含文字指标的示例图片: enter image description here 该文本的指标是: origin: y

除了FontMetrics(character_width=150.0, character_height=150.0, ascender=140.0, descender=-29.0, text_width=133.0, text_height=172.0, maximum_horizontal_advance=527.0, x1=12.90625, y1=0.5, x2=54.296875, y2=78.65625, x=134.0, y=0.0)(实际上是像素中文本的宽度),通过计算文本的尺寸,我看到由于某种原因,text_width是两个单词的高度之和, text_heightcharacter_width等于我在代码中选择的字体,但图片中的字母远离这些尺寸,character_height是巨大的,我不知道可以描述什么,maximum_horizontal_advanceascender似乎对于不会偏离文本中间线的字母来说太大了,而且边界框和原点坐标对我来说没有意义。< / p>

我可以找到这个指标的最接近的可视化http://www.imagemagick.org/Usage/text/#font_info但是我从代码中得到的数字似乎不适合这种可视化。

如果有人能对这些数字有所了解,我会非常感激,并建议我如何使用这些指标来获得更好的字母间距,而不仅仅是descenderdraw.text增加text_width的左偏移量。

提前感谢大家!

制作该图像的代码是:

from wand.image import Image, COMPOSITE_OPERATORS
from wand.drawing import Drawing
from wand.color import Color
from wand.font import Font
import random, os

imgname = random.choice(os.listdir('/home/gionny/Downloads/HighResImg'))
text = 'Tr'
fontname = random.choice(os.listdir('/home/gionny/Downloads/font'))
with Image(filename='HighResImg/'+imgname) as i:
    i.resize(1500,1000)
    with Drawing() as draw:
        draw.fill_color = Color('#fff')
            #draw.stroke_color = Color('#000')
            draw.font_size = 150
            draw.font = 'font/'+fontname
            textWidth = int(i.width*2/3)
        textHeight = int(i.height*2/3)
        offsetLeft = (i.width - textWidth)/2
        offsetTop = (i.height - textHeight)/2
        metrics = draw.get_font_metrics(i,text,False)
        print(metrics)
            draw.text(x = int(offsetLeft), y = int(offsetTop + metrics.text_height/4), body = text)
        with Image(filename='logo.gif') as l:
                l.resize(80,80)
                l.transparentize(0.7)
                with Image(width=textWidth, height=textHeight, background=Color("skyblue")) as c:
                    c.transparentize(0.3)
                    draw.composite(operator='atop', left=i.width-90, top=i.height-90, width=l.width, height=l.height, image=l)
                    draw.composite(operator='atop', left=offsetLeft, top=offsetTop, width=c.width, height=c.height, image=c)
                    draw(i)
    i.format = 'jpeg'
    i.save(filename='script2.jpg')

0 个答案:

没有答案