代码更换ui图片_用技术的方式,在UI设计稿中设置随机码,保证高清

本文首发于:行者AI

在工作中会遇到批量给图片添加文字,随机码等需求,当数据码数量较大时,UI的工作量就会非常大,这时候我们可以用python来帮我们提高工作效率。

1. 需求分析

我们有这样一张图片,我们需要将一批随机码添加到图片的固定位置。

b2fdf7c5a64dac04fb9bb6f6f4227ebe.png

2. OpenCV方法

在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦。OpenCV中并没有使用自定义字体文件的函数,这不仅意味着我们不能使用自己的字体,而且意味着他无法显示中文字符。这还是非常要命的事情。而且他显示出来的文字位置也不太好控制,比如下面的代码:

import cv2
import numpy as np
from pylab import *
#使用默认字体
font=cv2.FONT_HERSHEY_SIMPLEX
#新建图像
im=np.zeros((50,50,3),np.uint8)
#添加文字,1.2表示字体大小,(0,40)是初始的位置,(255,255,255)表示颜色,2表示粗细
img=cv2.putText(im,'行者AI',(0,40),font,1.2,(255,255,255),2)
imshow(img)

在实际运用中发现文字出现的位置并不怎么好把握,初始的坐标默认是指左下角的坐标不怎么方便,而且显示出文字以后我们也不好掌握他实际占的位置和大小。但也有方便之处就是,我们可以随意改变他的粗细,而不用更换字体。

3. PIL方法

使用PIL方法我们可以对字体,颜色等参数进行更加细致的配置。

from PIL import Image, ImageDraw, ImageFont
#打开原图
image = Image.open(filepath)
# 新建绘图对象
draw = ImageDraw.Draw(image)
image.show()
#可配置字体 字号 颜色
draw.text(size, text, font=setFont, fill=fillColor, direction=None)
#保存文件
pic_save(image, filename)

59e249319d7547134ff18f4a17010c96.png

我们可以发现,PIL支持使用自定义的字体文件,而且能够提供字体所占位置的详细信息,我们可以精确的确定文字所占的位置,在应用中特别有用。唯一的不足就是他不能改变字体的粗细(毕竟这用的是字体模板)。

4. PyPDF2方法

使用后发现 PIL方法更加好用, 可以迅速确定文字所占的位置, 但是我们需要将图片打印出来,这涉及到了清晰度的问题,上诉两种方法都无法保证图片清晰度和UI设计稿一致,所以我们选择将UI设计稿直接装换为pdf格式,再使用pypdf将文字添加到pdf上保证清晰度,代码如下:

from PyPDF2 import PdfFileWriter, PdfFileReader
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from reportlab.lib.units import inch, mm
import iopacket = io.BytesIO()
# 使用Reportlab创建一个新的PDF
can = canvas.Canvas(packet, pagesize=letter)
# 设置字体 和字号
can.setFont(font, size)
# 设置颜色
can.setFillColorRGB(1, 1, 1)
can.rotate(rotate)
# 更多颜色配置
# can.setStrokeColorRGB(0.2, 0.5, 0.3)
# can.setFillColorRGB(255, 20, 147)
# can.setStrokeColorRGB(220, 20, 60)can.drawString(x * mm, y * mm, text) # RTL
can.showPage()
can.save()
# buffer从偏移0开始
packet.seek(0)
new_pdf = PdfFileReader(packet)
# 读取已有的PDF
existing_pdf = PdfFileReader(open(old_pdf, "rb"))
output = PdfFileWriter()
# 在pdf第一页操作
page = existing_pdf.getPage(0)
page.mergePage(new_pdf.getPage(0))
output.addPage(page)
# 最后,向目标的pdf写出
outputStream = open(out_new_pdf, "wb")
output.write(outputStream)
outputStream.close()

b4ad289de57dfa9be77bc4f9c9e4f4ca.png

5. 总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用python能带来一定的帮助,如果对图片清晰度要求不高使用PIL方法更加便捷, 如果需要高清打印,建议使用PyPDF2方法。


PS:

我们是行者AI,我们在“AI+游戏”中不断前行。

快来【公众号 | xingzhe_ai】,和我们讨论更多技术问题吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hash地址_redis中的hash扩容、渐进式rehash过程

背景: redis字典(hash表)当数据越来越多的时候,就会发生扩容,也就是rehash对比:java中的hashmap,当数据数量达到阈值的时候(0.75),就会发生rehash,hash表长度变为原来的二…

是什么牌子_水晶项链什么牌子好

阅读本文前,请您先点击上面的蓝色字体,再点击“关注”,这样您就可以免费收到最新内容了。每天都有分享,完全是免费订阅,请放心关注! …

什么是机器人的五点校正法_机器人校正方法

机器人校正方法【专利说明】机器人校正方法[0001]本申请案主张于2012年9月18日申请之美国临时专利申请案第61/702,377号的优先权,所述专利申请案的揭示完整结合于此以供参考。技术领域[0002]本发明涉及一种工件加工,尤其涉及一种用于工件加工…

stn算子_深度学习常用算子(二)

1、Tensor维度变换1)Flatten作用:将输入tensor中从start_axis维度到end_axis维度合并为1维2)Reshape作用:将输入Tensor描述转换为新的shape3)FreespaceExtract作用:将h维变成1,其他维度不变,从而完成对h的采样&#xf…

iframe异步加载_5种延迟加载图像的方法以帮助你提升网站性能与用户体验

英文 | https://www.sitepoint.com/five-techniques-lazy-load-images-website-performance/翻译 | web前端开发(ID:web_qdkf)由于图像是Web上最流行也是必不可少的内容类型之一,因此网站上的图片页面加载时间很容易成为一个问题。即使进行了适当的优化&…

ubuntu18安装python3.6.8_ubuntu 18.04 + Python 3.6.8 更换软件安装源

国外的开源项目开展的是如火如荼,我们国内的当然也不甘落后。为了更好的玩转 Python,我使用了 ubuntu Linux 来作为开发环境。但是由于国内网络的限制,访问国外的一些软件源的时候,速度比较慢,这时我们需要更换成国内的…

springframework报错_应对报错信息的必杀技!

今天遇到了一个错误,一般的错误提示会很明显,一看就知道是什么问题。今天遇到的这个说实话真的不好找原因,一般在这种情况下该怎么解决呢?分享下我的思路吧,不一定是最好的,至少有用。直接上图吧&#xff0…

电脑运行卡顿怎么处理_【众点学】电脑运行PS卡顿?可能是你的虚拟内存没设置好!...

不少小伙伴都遇到过这样的烦恼明明自己的电脑拥有大内存PS用着用着就卡顿了经过教体君的仔(bai)细(du)研(yi)究(xia)发现原来电脑的 虚拟内存 只有2G当我们用大型软件或玩大型游戏电脑越用越卡时该怎么做?今天【众点学】我们一起来看看Win7和Win10系统下分别如何设置…

线程池拒绝策略 开发中常用什么策略_面试官:说说你知道多少种线程池拒绝策略...

往期文章为什么阿里Java规约要求谨慎使用SimpleDateFormathttps://www.toutiao.com/i6696127929048367629/为什么我强烈推荐你用枚举来实现单例模式https://www.toutiao.com/i6696861933687013901/为什么不要在MySQL中使用UTF-8编码方式https://www.toutiao.com/i6697966437727…

css html 双面打印_从 Linux 命令行进行打印 | Linux 中国

导读:在 Linux 命令行进行打印的内容比单单一个 lp 命令多得多,让我们来看一些可用选项。       本文字数:4305,阅读时长大约:5分钟https://linux.cn/article-13012-1.html作者:Sandra Henry-stocker译…

python保存快捷键是什么_python常用快捷键

最重要的快捷键1. ctrlshiftA:万能命令行2. shift两次:查看资源文件新建工程第一步操作1. module设置把空包分层去掉,compact empty middle package2. 设置当前的工程是utf-8,设置的Editor-->File Encodings-->全部改成utf-8,注释1. ctrl/:单行注释光标操作1. ctrlaltent…

服务器内存超限问题_服务器内存爆满最佳处置方案

内存爆满截图:分析:内存持续飙升,应该是有大量内存一直没有释放,考虑僵尸对象,僵尸进程,最简单的就是重启服务器,但是就无法找到罪魁祸首了。验证:top命令查看活跃进程的资源使用情况…

js map对象遍历_何时使用 Map 来代替变通的 JS 对象

JS 普通对象 {key: value} 用于存放结构化数据。但有一件事我觉得很烦:对象键必须是字符串(或很少使用的 symbol)。如果将数字用作键会怎样?在这种情况下不会有错误:const names { 1: One, 2: Two,};Object.keys(names); // > [1, 2]JS 会隐式地将…

mysql怎么显示结果窗口_mysql8中窗口函数

在以前的MySQL版本中是没有窗口函数的,直到MySQL8.0才引入了窗口函数。窗口函数是对查询中的每一条记录执行一个计算,并且这个计算结果是用与该条记录相关的多条记录得到的。1.窗口函数与聚合函数窗口函数与聚合函数很像,他们都是在一组记录而…

python控制台输入字符串作为参数_Python-如何将字符串传递到subprocess.Popen(使用stdin参数)?...

小编典典Popen.communicate() 说明文件:请注意,如果要将数据发送到进程的stdin,则需要使用stdin PIPE创建Popen对象。同样,要在结果元组中获得除None以外的任何内容,你还需要提供stdout PIPE和/或stderr PIPE。替换…

log4jdbc mysql_[简单]log4jdbc-log4j2配置简记_MySQL

log4jdbc-log4j2,就不多说了,不了解的可以谷歌,附上log4jdbc-log4j2的官方链接:https://code.google.com/p/log4jdbc-log4j2/ ,上面有非常详细的介绍。简单的贴下配置文件,其他的见附件:databas…

vb实时错误6 溢出_java内存溢出系列(6): Out of swap space?

本文是java内存溢出系列第6小篇。JVM启动参数指定了最大内存限制。如 -Xmx 以及相关的其他启动参数. 假若JVM使用的内存总量超过可用的物理内存, 操作系统就会用到虚拟内存。错误信息 java.lang.OutOfMemoryError: Out of swap space? 表明, 交换空间(swap space,虚拟内存) 不…

java备份还原mysql数据库_Java备份还原Mysql数据库

///实体类package com.ews.util;/*** 系统备份展示对象** */public class DataFile {private String fileName;//备份文件的名称private String fileDate;//备份文件的日期private String filePath;//备份文件的地址private String fileSize;//备份文件的大小public String get…

学pyqt5之前需要学python吗_快速学习pyqt5(1)--入门

学习于:PyQt5图形界面编程 想要系统学习的同学建议可以去这个专栏好好学习,没有任何语言基础和计算机基础的也建议直接去看那个专栏。我这里是有java基础了,所以就不重复,针对快速学习使用。学习这个的目的是完成学校的SIT项目&am…

reboot mysql fail_mysql 5.7.18,在系统重启后,为什么无法启动?

度娘也不给力,只好自己研究了。先把结论写出来吧。把pid文件换个位置,就好了。问题是, mysqld.servce的文件是从mysql的安装目录拷贝的,导致没有怀疑pid文件位置的问题。一开始还怀疑是不是自己在一些文件里拼写有误。后来&#x…