Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

Archived:Font on image using PySymbian

From Wiki
Jump to: navigation, search

Archived.pngAquivado: Este artigo foi arquivado, pois o conteúdo não é mais considerado relevante para se criar soluções comerciais atuais. Se você achar que este artigo ainda é importante, inclua o template {{ForArchiveReview|escreva a sua justificativa}}.

All PySymbian articles have been archived. PySymbian is no longer maintained by Nokia and is not guaranteed to work on more recent Symbian devices. It is not possible to submit apps to Nokia Store.

Article Metadata
Article
Created: gaba88 (29 Jun 2008)
Last edited: hamishwillee (31 May 2013)


With the launch of new version of PySymbian i.e. 1.4.4, font on an image is a very easy task. The code snippet below shows an example of that.

# Copyright (c) 2008 Nokia Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
 
from appuifw import *
from graphics import *
import e32
import time
 
app.body=c=Canvas()
 
fonts=[None,
(None,20),
'normal',
('normal',20),
(u'fasfsafs',20),
(u'Nokia Sans S60',10,0),
(u'Nokia Sans S60',20),
'dense',
'title',
(None,10,FONT_BOLD),
(None,10,FONT_ITALIC),
(None,10,FONT_ANTIALIAS),
(None,10,FONT_NO_ANTIALIAS),
('normal',None,FONT_BOLD),
('normal',None,FONT_ITALIC),
('normal',None,FONT_NO_ANTIALIAS)
]
 
def font_canvas():
app.body=c=Canvas()
c.clear()
tl=(0,0)
for font in fonts:
text_to_draw=u'font:'+str(font)
(bbox,advance,ichars)=c.measure_text(text_to_draw, font=font)
print bbox, advance, ichars
# position the next piece of text so the top-left corner of its bounding box is at tl.
o=(tl[0]-bbox[0],tl[1]-bbox[1])
# Draw the bounding box of the text as returned by measure_text
c.rectangle((o[0]+bbox[0],o[1]+bbox[1],o[0]+bbox[2],o[1]+bbox[3]),outline=0x00ff00)
c.text(o, text_to_draw, font=font)
# Compute the new top-left.
tl=(0,o[1]+bbox[3])
 
def font_image():
app.body=c=Canvas()
image = Image.new(c.size) # create an image
image.clear(0)
y = 20
for font in fonts:
text_to_draw=u'font:'+str(font)
# Draw the full text
image.text((0, y), text_to_draw, fill = 0x0000ff, font = font) # blue text on the image
y += 25
c.blit(image) # copy the image's contents to the lower part of the canvas
 
def measure_text():
app.body=c=Canvas()
c.clear()
tl=(0,0)
font='normal'
for maxwidth in (50,100,150,200,250):
text_to_draw=u'Lorem ipsum dolor sit amet'
(bbox,advance,maxchars)=c.measure_text(text_to_draw, font=font, maxwidth=maxwidth)
print bbox, advance, maxchars
# Position the next piece of text so the top-left corner of its bounding box is at tl.
o=(tl[0]-bbox[0],tl[1]-bbox[1])
# Draw the bounding box of the text as returned by measure_text
c.rectangle((o[0]+bbox[0],o[1]+bbox[1],o[0]+bbox[2],o[1]+bbox[3]),outline=0x00ff00)
# Draw the maximum width specification line.
c.line((tl[0],tl[1]+10,tl[0]+maxwidth,tl[1]+10), outline=0xff0000)
# Draw the full text
c.text(o, text_to_draw, font=font, fill=0x000080)
# Draw the text limited to given number of chars.
c.text(o, text_to_draw[0:maxchars], font=font, fill=0)
# Compute the new top-left.
tl=(0,o[1]+bbox[3]+3)
 
def font_benchmark():
app.body=c=Canvas()
c.clear()
tl=(0,0)
font='normal'
text=u'Lorem ipsum dolor sit amet'
def bench(name, func):
start=time.time()
func()
end=time.time()
print "%s: %d s"%(name,end-start)
def default_font_test(c,t):
for k in range(1000):
c.text((0,30),t)
bench("default font", lambda:default_font_test(c,text))
 
def font_attributes():
app.body=c=Canvas()
c.clear()
y=20
for font in [(None,None,0),
(None,None,FONT_ITALIC),
(None,None,FONT_BOLD),
(None,None,FONT_ITALIC|FONT_BOLD),
(None,None,FONT_ANTIALIAS),
(None,None,FONT_SUPERSCRIPT),
(None,None,FONT_SUBSCRIPT),
(None,None,FONT_NO_ANTIALIAS)]:
c.text((20,y), u'abcd '+str(font), font=font)
y+=20
 
 
def font_text():
app.body=t=Text()
for font in fonts:
t.font=None
t.add(u'font:'+str(font))
t.font=font
t.add(u'abcd1234')
 
 
 
lock=e32.Ao_lock()
app.screen='full'
app.exit_key_handler=lock.signal
 
app.menu=[(u'Fonts on canvas', font_canvas),
(u'Fonts on image', font_image),
(u'Measure text', measure_text),
(u'Font attributes', font_attributes),
(u'Font benchmark', font_benchmark),
(u'Fonts on Text', font_text)]
font_canvas()
lock.wait()
This page was last modified on 31 May 2013, at 01:03.
33 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×