当我 运行 pycharm 中的 ascii 艺术程序时没有做任何事情

doesn't do anythinng when I run the ascii art program in pycharm

我从事这个项目有一段时间了。 Ascii 所做的是当我们 运行 程序时,它要求一张图片,在我们给它图片后它把它变成 symbols/letters 如果你还是不明白,请阅读以下内容: ASCII 艺术是一种使用计算机进行演示的图形设计技术,由 1963 年 ASCII 标准定义的 95 个可打印字符和具有专有扩展字符的 ASCII 兼容字符集拼凑而成的图片组成。

所以这是我在python中写的代码(Pycharm,一个Python IDE):

import PIL.Image

ASCII_CHARS = ["@", "#", "S", "%", "?", "*", "+", ";", ":", ",", "."]


def resize_image(image, new_width=100):
    width, height = image.size
    ratio = height / width / 1.65
    new_height = int(new_width * ratio)
    resized_image = image.resize((new_width, new_height))
    return(resized_image)

def grayify(image):
    grayscale_image = image.convert("L")
    return(grayscale_image)

def pixels_to_ascii(image):
    pixels = image.getdata()
    charecters = "".join([ASCII_CHARS[pixel//25] for pixel in pixels])
    return(charecters)

def main(new_width=100):
    path = input("Enter a valid pathname to an image :\n")
    try:
        image = PIL.Image.open(path)
    except:
        print(path, "is not a valid pathname to an image")

        new_image_data = pixels_to_ascii(grayify(resize_image(image)))

        pixel_count = len(new_image_data)
        ascii_image = '\n'.join(new_image_data[i:(i+new_width)] for i in range(0, pixel_count, new_width))

        print(ascii_image)

        with open("ascii_image.txt", "w") as f:
            f.write(ascii_image)
        main()

每次我 运行 我都有 0 个错误、0 个警告、0 个弱警告和 0 个拼写错误。但它不起作用并显示:

Process finished with exit code 0

仅此而已,我该如何解决这个问题并让它发挥作用...

您正在 main() 函数本身内部调用 main() 函数,因此没有输出。
你应该放置 main() 没有任何缩进:

def main():
    # code

main()

调用 main() 函数的最佳实践:

if __name__ == "__main__":
    main()

这样您就可以进一步重用这个程序,而无需在任何导入中执行 main 函数。

还有一件事,在使用 PIL 打开图像后,您没有在主函数中执行任何操作,因此没有输出,如果您使用 PIL.Image,则不应写 import PIL.Image,您应该使用 import PIL,否则建议使用from PIL import Image当你想使用Imageclass从PIL。您还在 except.

的正文中使用 image

建议:
您将图像文件的路径作为输入,这对用户来说有点烦人,您可以使用 tkinter.filedialog 来获取文件路径,如下所示:

from tkinter.filedialog import askopenfilename
.
.
def main():
    path = askopenfilename(filetypes=(("Images", ["*.jpg", "*.png", "*.jpeg"]), ))
# ..