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