total_width, _ = draw.textsize(''.join(chars), font=font)
时间: 2024-03-28 22:40:37 浏览: 16
这行代码的作用是计算给定的文本字符串 `''.join(chars)` 在指定的字体 `font` 下绘制时所需要的宽度和高度。`textsize()` 方法是 ImageDraw 模块中的一个函数,用于返回给定文本字符串在指定字体下的大小。这个方法的返回值是一个二元组,第一个元素是文本字符串的宽度,第二个元素是文本字符串的高度。在这个代码中,我们只需要文本字符串的宽度,因此用 `_` 来占位第二个元素。将返回的宽度赋值给 `total_width` 变量,后面可能会用到。
相关问题
#计算字符在图像上的坐标和位置 total_width, _ = draw.textsize(''.join(chars), font=font) #计算字符串的宽度 left_padding = (width - total_width) // 2 #计算左边距,即第一个字符的x坐标,使得整个字符串处于图片中央。 for i, char in enumerate(chars): char_width, _ = draw.textsize(char, font=font) #计算单个字符的宽度 x = left_padding + i * (char_width + 10) #计算单个字符的横坐标,以10为间距 y = (height - char_width) // 2 #计算单个字符的纵坐标 angle = random.randint(-90, 30) #字符旋转角度 color = rnd1_color() draw.text(xy=(x, y), text=char, font=font, fill=color)
这段代码是用来在图像上绘制一串字符,并使其居中显示。首先计算出所有字符组成的字符串的宽度,然后通过计算左边距,即第一个字符的横坐标,使得整个字符串处于图片中央。接着,遍历所有字符,计算出每个字符的横纵坐标和旋转角度,并用随机颜色将它们绘制到图像上。其中,函数 draw.textsize() 可以计算出字符串的宽度和高度;函数 random.randint() 用于生成一个随机整数。
import cv2 import numpy as np from PIL import Image, ImageDraw, ImageFont # 视频分辨率 VIDEO_WIDTH = 1920 VIDEO_HEIGHT = 1080 # 文本属性 FONT_SIZE = int(VIDEO_HEIGHT * 0.75) FONT_COLOR = (255, 255, 255) # 背景属性 BACKGROUND_COLOR = (255,0,0,255) # 文本滚动速度 SCROLL_SPEED = int(VIDEO_WIDTH / 100) # 跑马灯文本 MARQUEE_TEXT = "Hello World! This is a marquee text." # 创建视频输出对象 fourcc = cv2.VideoWriter_fourcc(*'mp4v') video_writer = cv2.VideoWriter("E:/Template/word/marquee.mp4", fourcc, 25, (VIDEO_WIDTH, VIDEO_HEIGHT)) # 创建画布 canvas = Image.new('RGB', (VIDEO_WIDTH, VIDEO_HEIGHT), BACKGROUND_COLOR) draw = ImageDraw.Draw(canvas) # 加载字体 font = ImageFont.truetype("arial.ttf", FONT_SIZE) # 计算文本宽度 text_width, text_height = draw.textsize(MARQUEE_TEXT, font=font) # 文本起始位置 x = VIDEO_WIDTH # 循环生成帧并写入视频文件 while x > -text_width: # 添加文本 draw.text((x, (VIDEO_HEIGHT - text_height) / 2), MARQUEE_TEXT, font=font, fill=FONT_COLOR) # 转换图像格式 frame = np.array(canvas) frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) # 写入视频文件 video_writer.write(frame) # 清空画布 draw.rectangle((0, 0, VIDEO_WIDTH, VIDEO_HEIGHT), fill=BACKGROUND_COLOR) # 更新文本位置 x -= SCROLL_SPEED # 释放资源 video_writer.release() 优化代码,加入导出进度条百分比
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
# 视频分辨率
VIDEO_WIDTH = 1920
VIDEO_HEIGHT = 1080
# 文本属性
FONT_SIZE = int(VIDEO_HEIGHT * 0.75)
FONT_COLOR = (255, 255, 255)
# 背景属性
BACKGROUND_COLOR = (255,0,0,255)
# 文本滚动速度
SCROLL_SPEED = int(VIDEO_WIDTH / 100)
# 跑马灯文本
MARQUEE_TEXT = "Hello World! This is a marquee text."
# 创建视频输出对象
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
video_writer = cv2.VideoWriter("E:/Template/word/marquee.mp4", fourcc, 25, (VIDEO_WIDTH, VIDEO_HEIGHT))
# 创建画布
canvas = Image.new('RGB', (VIDEO_WIDTH, VIDEO_HEIGHT), BACKGROUND_COLOR)
draw = ImageDraw.Draw(canvas)
# 加载字体
font = ImageFont.truetype("arial.ttf", FONT_SIZE)
# 计算文本宽度
text_width, text_height = draw.textsize(MARQUEE_TEXT, font=font)
# 文本起始位置
x = VIDEO_WIDTH
# 循环生成帧并写入视频文件
while x > -text_width:
# 添加文本
draw.text((x, (VIDEO_HEIGHT - text_height) / 2), MARQUEE_TEXT, font=font, fill=FONT_COLOR)
# 转换图像格式
frame = np.array(canvas)
frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
# 写入视频文件
video_writer.write(frame)
# 清空画布
draw.rectangle((0, 0, VIDEO_WIDTH, VIDEO_HEIGHT), fill=BACKGROUND_COLOR)
# 更新文本位置
x -= SCROLL_SPEED
# 导出进度条百分比
progress = int((x / VIDEO_WIDTH) * 100)
print("Exporting video: {}%".format(progress), end='\r')
# 释放资源
video_writer.release()