提问人:Python_Dude 提问时间:7/6/2023 最后编辑:Python_Dude 更新时间:9/12/2023 访问量:35
在 Python 中创建文本到 png 到 ico 的意外问题
unexpected problems creating text to png to ico in Python
问:
我在 Windows 11 上的 Visual Studio Code 中使用 Python 3.11.4。
执行以下 Python 代码后,我收到 2 张保存的图片:一个 png 和一个 ico 文件 ( & ) 如预期的那样。但是文件有问题。当我尝试重命名(例如重命名为 )时,我会收到一个带有文本的文本:Hello.png
Hello.ico
Hello.png
World.png
Windows-Errormessage
"Die Aktion kann nicht abgeschlossen werden, da die Datei in Windows-Explorer geöffnet ist. Schließen Sie die Datei und wiederholen Sie den Vorgang."
英文:
"The action cannot be completed because the file is open in Windows Explorer. Close the file and try again."
但文件未打开。重新启动 Windows 后,可以重命名该文件。
import os
from PIL import Image, ImageDraw, ImageFont
def generate_png(text):
# Bild erstellen
image = Image.new("RGB", (256, 256), (255, 255, 255))
draw = ImageDraw.Draw(image)
# Schriftart und -größe festlegen
font_size = 1
font = ImageFont.truetype("arialbd.ttf", font_size)
text_width = draw.textlength(text, font=font)
bbox = draw.textbbox((0, 0), text, font=font)
text_height = bbox[3] - bbox[1]
while text_width < image.width and text_height < image.height:
font_size += 1
font = ImageFont.truetype("arialbd.ttf", font_size)
text_width = draw.textlength(text, font=font)
bbox = draw.textbbox((0, 0), text, font=font)
text_height = bbox[3] - bbox[1]
font_size -= 1
font = ImageFont.truetype("arialbd.ttf", font_size)
# Text auf das Bild zeichnen
bbox = draw.textbbox((0, 0), text, font=font)
x = (256 - bbox[2] - bbox[0]) // 2
y = (256 - bbox[3] - bbox[1]) // 2
draw.text((x, y), text, fill=(0, 0, 0), font=font) # fill=(0, 0, 0) -> schwarzer Text
# Ordner "generierte_Bilder" erstellen, falls er noch nicht existiert
folder_path = "generated_pics"
if not os.path.exists(folder_path):
os.makedirs(folder_path)
# Bild speichern
image_path = os.path.join(folder_path, f"{text}.png")
image.save(image_path)
image.close()
return image_path
def generate_icon(png_file):
# PNG-Bild laden
image = Image.open(png_file)
# Icon-Datei erstellen
icon = Image.new("RGBA", (256, 256))
# Bildgrößen für das Icon definieren
sizes = [(16, 16), (32, 32), (48, 48), (64, 64), (96, 96), (128, 128), (256, 256)]
# PNG-Bild in verschiedene Größen konvertieren und im Icon platzieren
for size in sizes:
resized_image = image.resize(size, Image.Resampling.LANCZOS)
offset = ((256 - size[0]) // 2, (256 - size[1]) // 2)
icon.paste(resized_image, offset)
image.close()
# Icon als ICO-Datei speichern
pre, ext = os.path.splitext(png_file)
icon_file = png_file
os.rename(icon_file, pre + ".ico")
icon.save(icon_file, format="ICO")
def generate_pic():
text = "Hello"
png_path = generate_png(text)
generate_icon(png_path)
if __name__ == "__main__":
generate_pic()
当我评论这句话时
generate_icon(png_path)
out,而不是在执行代码后重命名png可以正常工作。但目标是接收一个 ico 文件。
需要对代码进行哪些更改,以便从 创建 png 文件,然后从 创建 ico 文件,但以这样一种方式,即在创建 png 文件后,可以重命名它?text
答: 暂无答案
评论