[英]How to save an image with the outline text using pygame?
The following code is saving this image .以下代码正在保存此图像。
import pygame
pygame.init()
font = pygame.font.SysFont('arialroundedbold.ttf', 60)
text = font.render("hello world", True, (0, 0, 0), (255, 255, 255))
pygame.image.save(text, "hello_world.png")
How do I add a red outline around the text "hello world " with a specific boldness (let say 3 points) and save it?如何在文本“hello world ”周围添加一个具有特定粗体(比如说 3 点)的红色轮廓并保存它?
If want to draw an outline around the letters see Have an outline of text in Pygame .如果想在字母周围画出轮廓,请参阅Pygame 中的文字轮廓。
import pygame
pygame.init()
window = pygame.display.set_mode((400, 400))
def render_text_outline(font, text, color, background, outline, outlinecolor):
outlineSurf = font.render(text, True, outlinecolor)
outlineSize = outlineSurf.get_size()
textSurf = pygame.Surface((outlineSize[0] + outline*2, outlineSize[1] + 2*outline))
textSurf.fill(background)
textRect = textSurf.get_rect()
offsets = [(ox, oy)
for ox in range(-outline, 2*outline, outline)
for oy in range(-outline, 2*outline, outline)
if ox != 0 or ox != 0]
for ox, oy in offsets:
px, py = textRect.center
textSurf.blit(outlineSurf, outlineSurf.get_rect(center = (px+ox, py+oy)))
innerText = font.render(text, True, color).convert_alpha()
textSurf.blit(innerText, innerText.get_rect(center = textRect.center))
return textSurf
font = pygame.font.SysFont('arialroundedbold.ttf', 60)
text_outline = render_text_outline(
font, "hello world", (0, 0, 0), (255, 255, 255), 3, (255, 0, 0))
# save to file
pygame.image.save(text_outline, "hello_world.png")
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
window.fill((127, 127, 127))
window.blit(text_outline, text_outline.get_rect(center = window.get_rect().center))
pygame.display.flip()
pygame.quit()
exit()
If you want to draw an outline around the text box, define width and color of the outline:如果要在文本框周围绘制轮廓,请定义轮廓的宽度和颜色:
width = 3
outline_color = "red"
Create a pygame.Surface
that is twice the thickness of the outer line wider and higher than the text Surface :创建一个
pygame.Surface
,它是外线厚度的两倍,比文本Surface宽和高:
outline_w = text.get_width() + width*2
outline_h = text.get_height() + width*2
text_outline = pygame.Surface((outline_w, outline_h))
Fill in the new Surface with the color of the outline:用轮廓的颜色填充新的Surface :
text_outline.fill(outline_color)
Put the text Surface in the middle of the new Surface :将文本Surface放在新Surface的中间:
text_outline.blit(text, text.get_rect(center = text_outline.get_rect().center))
Minimal example:最小的例子:
import pygame
pygame.init()
window = pygame.display.set_mode((400, 400))
font = pygame.font.SysFont('arialroundedbold.ttf', 60)
text = font.render("hello world", True, (0, 0, 0), (255, 255, 255))
width = 3
outline_color = "red"
outline_w = text.get_width() + width*2
outline_h = text.get_height() + width*2
text_outline = pygame.Surface((outline_w, outline_h))
text_outline.fill(outline_color)
text_outline.blit(text, text.get_rect(center = text_outline.get_rect().center))
# save to file
pygame.image.save(text_outline, "hello_world.png")
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
window.fill((127, 127, 127))
window.blit(text_outline, text_outline.get_rect(center = window.get_rect().center))
pygame.display.flip()
pygame.quit()
exit()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.