本文首发于:行者AI

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

1. 需求分析

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

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)

我们可以发现,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()

5. 总结

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


PS:

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

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

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

  1. mac微软雅黑字体_【字体字重】常见设计稿字体对应字重

    总结如下: Font-weight就是字形的重量,就是粗不粗.在和程序员对接设计的过程中,发现前端大佬很多该加粗的地方都没有加粗,由此顺藤摸瓜,发现前端大佬们在看标注时,都不知道Pingfang的me ...

  2. 将CAD图纸转换出来的图片怎么设置其为高清JPG格式?

    将CAD图纸转换出来的图片怎么设置其为高清JPG格式?对于将CAD图纸文件进行格式间的转换操作,都是为了方便将CAD图纸文件进行更好的传输和方便将其进行查看的操作,经常需要操作的就是将CAD图纸文件进 ...

  3. ui设计移动端字体适配_UI设计稿中常见的单位及移动端适配

    一.pt 在我们的设计稿中,经常看到以pt单位来标注的稿子,那么pt究竟是个什么单位?其实pt是用于印刷行业用来表示字体大小的单位,也叫做磅,用过word设置字体的应该不会陌生,它是一个绝对长度,为1 ...

  4. unity代码更换ui图片_Unity UI图片的一种优化方式

    项目中使用的不少UI图片是轴对称的,包括:1)横轴对称或纵轴对称 2)同时满足横轴对称和纵轴对称 图1:竖轴对称图片 可以使用镜像效果来节省图片资源.第一种情况可以省下完整资源的一半,第二种情况则可以 ...

  5. 小程序图片缓存策略(不改代码更换OSS图片)

    昨天,后端给我提了一个问题:他更换了CDN上的图片,但是他打开小程序来看,还是旧图片,他尝试过删除小程序,重新进,还是旧图片. 我第一反应是:"你有没有清CDN缓存?" 他说:&q ...

  6. 佛祖保佑代码无bug图片_注释保佑无bug · haoliqiang/blog Wiki · GitHub

    佛祖保佑 永无BUG // _ooOoo_ // o8888888o // 88" . "88 // (| -_- |) // O\ = /O // ____/`---'\____ ...

  7. python爬取英雄联盟所有皮肤价格表_利用Python协程来爬取LOL所有英雄的皮肤高清图片...

    最近有一朋友要LOL的数据进行数据分析,叫我帮他抓一下数据.突发奇想,顺便把英雄的所有皮肤下载到本地好了. PS: 安装了LOL的伙伴图片直接在LOL文件夹里面,可以百度寻找.此贴仅分享下技术思路以及 ...

  8. 会话技术 —— Cookie 实现原理 || 在idea编辑器中设置代码的模板

    会话技术 1. 会话:一次会话中包含多次请求和响应.     * 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 2. 功能:在一次会话的范围内的多次请求间,共享数据 3. ...

  9. html 图片点击查看大图_【神游千年,大美敦煌】北魏-260窟【高清大图】

    [神游千年,大美敦煌]北魏-260窟[高清大图] --------------------------------------------------------------------------- ...

最新文章

  1. pytorch生成对抗示例
  2. 计算机组成原理设计一个Isa,计算机组成原理
  3. php七牛云储存图片,wordpress使用七牛云存储图片 | 厘米天空
  4. STC51-1602、12232、12864液晶
  5. Android开发笔记(九十七)图片的特效处理
  6. TypeScript学习笔记(第一天)------创建简单的web应用
  7. vue2.0click点击事件修饰符stop阻止单击事件冒泡prevent阻止默认事件
  8. 头歌 1.Pandas安装与对象使用
  9. [论文总结] 深度学习在农业领域应用论文笔记3
  10. 多线程编程与资源同步API和示例
  11. 1st percentile  分位数的理解 quartile quantile percentile
  12. Increasing Triplet Subsequence
  13. R语言实战笔记 基本统计分析-频数列联表和简单的独立性检验
  14. 游戏引擎 白鹭(egret)学习总结(一)
  15. Linux yest2图形安装ftp,(伪)从零开始学转录组:软件安装
  16. c#编写部署windows服务
  17. 计算机辅助审计技术实训心得体会,审计实训心得体会(精选3篇)
  18. 在Eclipse中配置CheckStyle
  19. eclipse各种常用插件在线安装.txt
  20. vue之路由与无痕浏览

热门文章

  1. jmeter+mysql+set_jmeter学习指南之操作 mysql 数据库
  2. linux下后台启动springboot项目
  3. 基于zookeeper(集群)+LevelDB的ActiveMq高可用集群安装、配置、测试
  4. JDBC出现这个错误的解决办法Connections could not be acquired from the underlying database!
  5. 《我的第一本算法书》 - 学习记录
  6. 非vue子页面 调用vue父页面方法
  7. Java-三元运算符
  8. python高阶函数闭包装饰器_Python自学从入门到就业之高阶函数、嵌套函数、闭包、装饰器...
  9. 三点估算pmp_【每日一练】PMP项目管理专业资格认证考试练习题(十)
  10. 更改盘符不成功_DVD光驱不读盘怎么解决?DVD光驱能刻录吗