仅供个人使用,如有问题可私信或评论区留言
存在意义
在csdn上发布文章的时候,需要上传封面图片,可系统自带图片不好看,而且还不能自定义文字,如果从其他地方随便找个好看的封图,会发现,图片长宽比的不适配的原因导致不能很好的自适应!即图片部分内容会被减裁掉,于是我在经过一番了解后,写了一个脚本程序,使之能够根据程序中嵌入的背景图片,以及用户输入的文本,给出一个480*270像素的png图片。这样就可以拥有一个好看的文章封面图片啦q(≧▽≦q)!!!
源码叙述
其中有两处路径需要更改,在22-25行,变量名为font_path
和texture_path
,前者为字体库路径(即插入图片中的字体类型),后者为背景图片路径。字体库可用电脑自带ttf文件,或者是网上找喜欢的(我找的字体库网站分享在最下方链接中)。两者均需用绝对路径。
import os
from PIL import Image, ImageDraw, ImageFont
def create_image(content, save_path):
"""
使用预定义的字体和大小,创建一个图像,并将指定的文本内容居中显示。当文本宽度大于图片宽度时,
自动计算出合适的字体大小以适应图片宽度。当文本宽度小于图片宽度时,字体大小保持为96。
此外,文本将具有50%透明度的红色边缘阴影效果。
参数:
- content (str): 要写入图像的文本内容。支持通过 '\n' 分隔的多行文本。
- save_path (str): 生成的图像将被保存到的文件路径。
该函数不返回任何值,但会将生成的图像保存到指定路径。
"""
image_width = 480
image_height = 270
lines = content.split("\n") # 将输入文本分割成行
initial_font_size = 96 # 初始字体大小
font_path = (
"C:/Users/29173/AppData/Local/Microsoft/Windows/Fonts/ZiZiMuTiv1.002-2.ttf"
)
texture_path = "D:/vscode_workspace/python310/csdn_home_img_create/resource/175534490_0_final.png" # 纹理图像文件的路径
texture_image = Image.open(texture_path).resize(
(image_width, image_height)
) # 加载背景图像并调整其大小以适应要求的图像大小
image = texture_image.convert("RGBA") # 确保图像是RGBA模式以支持透明度
draw = ImageDraw.Draw(image)
shadow_offset = (3, 3) # 阴影偏移量
shadow_color = (255, 0, 0, 128) # 带有50%透明度的红色阴影
# 绘制文本
for line in lines:
font_size = initial_font_size
font = ImageFont.truetype(font_path, font_size) # 创建字体对象
# 使用getbbox获取文本的边界框
left, top, right, bottom = draw.textbbox((0, 0), line, font=font)
text_width = right - left
text_height = bottom - top
# 当文本宽度大于图片宽度时,自动调整字体大小,直到文本宽度小于等于图片宽度为止
while text_width > image_width and font_size > 1:
font_size -= 1
font = ImageFont.truetype(font_path, font_size)
# 使用getbbox获取文本的边界框
left, top, right, bottom = draw.textbbox((0, 0), line, font=font)
text_width = right - left
text_height = bottom - top
# 将文本居中显示在图片上
x_text = (image_width - text_width) / 2 - left
total_text_height = len(lines) * (text_height + 5) - 5 # 计算文本总高度
y_text = (image_height - total_text_height) / 2 - top
# 首先绘制阴影文本
draw.text(
(x_text + shadow_offset[0], y_text + shadow_offset[1]),
line,
shadow_color,
font=font,
)
# 然后在上面绘制原始文本
draw.text(
(x_text, y_text), line, fill=(0, 0, 0, 255), font=font
) # 确保文本不透明
y_text += text_height + 5
image.save(save_path)
def path_rectify(save_path):
"""
校正提供的保存路径,确保其为有效的图像文件路径。如果路径是一个目录,则在该目录下创建以文本内容命名的.png文件。
如果路径不是目录,根据路径是否包含文件扩展名来进行处理:如果没有扩展名,将路径视为目录,并在其中创建.png文件;
如果有扩展名但不是.png,将.png添加到现有路径末尾。此外,如果路径中的中间目录不存在,则会创建这些目录。
"""
if not save_path: # 检测save_path是否为空
save_path = os.path.join(os.getcwd(), f"{text}.png")
elif os.path.isdir(save_path): # 检测save_path是否指向一个已存在的目录
save_path = os.path.join(save_path, f"{text}.png")
else:
# 如果save_path不是目录,检查是否已经有文件名
base, ext = os.path.splitext(save_path)
# 调整目录,以更好检查中间级目录
if not ext:
directory = base
else:
directory = os.path.dirname(save_path)
if not ext:
# 如果没有文件扩展名,使用文本作为文件名并保持.png扩展名
if not os.path.exists(directory): # 检查中间级目录是否存在
os.makedirs(directory) # 创建中间级目录
save_path = os.path.join(directory, f"{text}.png")
else:
# 如果有文件扩展名
if ext.lower() != ".png":
# 如果文件扩展名不是.png,添加.png扩展名
save_path += ".png"
if not os.path.exists(directory): # 检查中间级目录是否存在
os.makedirs(directory) # 创建中间级目录
return save_path
if __name__ == "__main__":
# 提示用户输入文本
text = input("请加入文本内容:")
# 保存的文件名为文本内容,默认保存路径为当前路径
save_path = input(
f"请加入图像生成存储路径(直接回车则默认是当前路径, 默认文件名是输入的文本): "
).strip()
# 校正保存路径,确保其为有效的图像文件路径
save_path = path_rectify(save_path)
create_image(text, save_path)
print(f"图片已保存到:{save_path}")
使用方法
第一步:
确保具有python基本开发环境和pillow库,通过终端输入python --version
来检查python版本,输入pip show pillow
来检查pillow库版本。
成功示例:
第二步:
创建main.py
来存放上述源码,找到一张喜欢的背景图片,ttf字体库看个人选择,可默认选择电脑自带ttf文件(一般电脑ttf文件存放默认路径在"C:\Windows\Fonts"),更改font_path
、texture_path
路径为文件所在位置,源码中有我的示例路径。
成功示例: 我创建的文件夹示例
第三步:
终端执行python .\main.py
运行脚本代码,正常运行情况下跟随提示输入相应信息即可。
你会发现执行路径对应的目录下会多出一个图片,该图片即为合成后的图片。
成功示例: 效果图
相关信息
python3.10、pillow10.3.0
链接:
https://www.fonts.net.cn/
描述:一个可以提供ttf字体库的网站
博主真是太厉害了!!!
暂无点赞
怎么收藏这篇文章?
暂无点赞
兄弟写的非常好 https://www.cscnn.com/
暂无点赞
《水木奇缘之万物定律》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/114427.html
暂无点赞
真好呢
暂无点赞
《灵魂停留》恐怖片高清在线免费观看:https://www.jgz518.com/xingkong/31234.html
暂无点赞
zhongql.com
暂无点赞
《灵魂停留》恐怖片高清在线免费观看:https://www.jgz518.com/xingkong/31234.html
暂无点赞
哈哈哈,写的太好了https://www.lawjida.com/
暂无点赞
文章结构紧凑,层次分明,逻辑严密,让人一读即懂。
暂无点赞
情感真挚,直击人心,引发强烈共鸣。
暂无点赞
选材新颖独特,通过细节描写赋予主题鲜活生命力。
暂无点赞
建议增加个人经历分享,增强情感穿透力。
暂无点赞
作者对主题的挖掘深入骨髓,展现了非凡的洞察力和理解力。
暂无点赞