当我 运行 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
当你想使用Image
class从PIL
。您还在 except
.
的正文中使用 image
建议:
您将图像文件的路径作为输入,这对用户来说有点烦人,您可以使用 tkinter.filedialog 来获取文件路径,如下所示:
from tkinter.filedialog import askopenfilename
.
.
def main():
path = askopenfilename(filetypes=(("Images", ["*.jpg", "*.png", "*.jpeg"]), ))
# ..
我从事这个项目有一段时间了。 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
当你想使用Image
class从PIL
。您还在 except
.
image
建议:
您将图像文件的路径作为输入,这对用户来说有点烦人,您可以使用 tkinter.filedialog 来获取文件路径,如下所示:
from tkinter.filedialog import askopenfilename
.
.
def main():
path = askopenfilename(filetypes=(("Images", ["*.jpg", "*.png", "*.jpeg"]), ))
# ..