1def generate_image(static_dir, image_type, width, height, color): print(static_dir, image_type, width, height, color)
color_tuple = ImageColor.getcolor(color, mode)
image = Image.new(mode, (width, height), color_tuple)
11image_dir = os.path.join(static_dir, 'image')
12image_name = '%sx%s_%s.%s' % (width, height, int(time.time()), image_type)
image_path = os.path.join(image_dir, image_name)
16font = ImageFont.truetype('./font/consola.ttf', 96) draw = ImageDraw.Draw(image)
18 mark_content = '{width}x{height}'.format(width=width, height=height)
19draw.text((60*i + 10, 10), ch, font=font, fill=rndColor())
20 for i, ch in enumerate(mark_content):
23print('image_path:%s' % (image_path))
这个就是核心的生成图片的逻辑,其中稍微费了点时间的是水印的生成,这里添加水印的用意是为了在图片上显示图片的尺寸,方便使用者直观的看到该图片的尺寸,其中需要使用到ImageDraw.text()方法,这里需要注意的是要根据你的字体大小设置合适的字间距,我是通过多次调整尝试的,最终得到一个自己满意的效果。
另外,关于字体名字,默认在不同平台下会去不同的目录查找该名字的字体,Windows下是在c://windows/fonts/目录下,Linux是在/usr/share/fonts目录下,这里为了避免后续部署时不同电脑上字体不同导致的问题,我直接把字体文件放在代码库中了,所以使用的是一个相对路径。