最近,我遇到了一个需求,需要根据公司的名称生成一个临时徽标,并以base64图像的形式显示在网页上。这个问题可以分解为以下两个问题:
用python把文字变成图片其实很简单。只要搜索一下,就能找到很多。我找到了一个大老板(Phodal Huang)将文本转换为图片的实现。文中部分图片转文字的实现参考了Phodal Huang的实现(本人已获得与作者二次开发的许可,使用的字体为开源字体)。
文章参考文章地址:Python PIL转换文字为Logo实现效果:
因为我这里有很多附加要求,而Phodal Huang是用Python2实现的,我想用python3,很多地方不兼容,只能作为参考。下面记录我的实现过程。
转载请注明。
程序的输入可能是公司的全称,比如北京xxxx科技有限公司,也可能是其简称,比如易筹(这里不知道是否涉及版权相关问题,如侵权请联系我,我会修改删除)。显然,在输入完整的公司名称时,直接将公司名称转换成图片并不友好,将其业务名称提取成图片可能更合适。比如北京xxxx科技有限公司,可以简单提取xxxx作为商号。
该部分的主要代码如下:
主要工作如下:
我们可以做一些测试:
(以上所有公司名称,侵删)
效果尚可。
当文本很长时,可能会出现换行符。但是直接断行的话,很容易把连贯的话拆开,印象也不是很好。于是我想到了对文字进行分割,然后根据分割结果对每行内容进行排列,居中显示。
核心代码如下:
这部分没什么特别需要注意的,评论也很明确,所以不多。嗯……整体显示效果好了很多,但还是有一些看起来很别扭。Emmmm,聊胜于无。
至于配色和字体,我就不用自己动手了。字体直接来自Phodal Huang上传的字体。对于配色,我从几个给定的配色方案中选择了我更喜欢的一个。
给定的配色方案是十六进制色码,需要转码成rgb。因为兼容性问题,我重新实现了这部分,增加了一些容错处理。
接下来,是文字转图片的核心代码。有关可接受的参数,请参见方法说明,这些参数非常清楚:
使文本处理成为可选参数。如果想把文字原封不动的变成图片,只需要把need_extracted和need_arrayed设置为false即可。默认情况下,这两项是打开的。
如果想要本地生成的图片,只需将show_image设置为true,默认情况下是关闭的。
我们可以试着生成一张图片。测试代码如下:
1:输入:
产出1:
2:输入:
2:输出:
3:输入:
产出3:
4.输入:
产出4:
5:输入:
产出5:
(以上公司名称及生成图片均为侵删)
总体来说效果不错,可以接受,能满足我的需求。
从上面的代码可以看出,我的实现中文本到图片的返回是一个字符串,其内容是生成图片的base64代码。那么,如果我们得到了这段代码,我们如何在网页中显示它呢?
很简单。首先,创建最简单的html,然后在其中添加img标签。
就把上面的xxxxx
用我们得到的base64字符串替换xx。
让我们在浏览器中打开它看一看:
好的,完全没问题,今天到此为止!
github上开源的完整代码,地址3360
点击text 2登录或访问。
一支彩色笔。如果文章或代码中有任何问题,请更正。
本文涉及的所有公司名称均从网上随机选取,本文写作仅供技术交流。如果本文涉及的所有公司名称和生成的图片侵犯了您的权利,请联系我。我看到后会马上修改删除。谢谢大家的理解!