DAY17 - 第五个小范例 : 图片加浮水印

前言

今天是铁人赛的第十七天,要来做一个临时的side project : 批次在图档上加浮水印

动机与需求

大叔在写这个铁人赛的文章时,会把要demo的图片一次传到Imgur上面,因为图档大多是背景是黑色的终端机的操作画面,图片整批丢上去,无法从档案的缩图上看出图片的顺序
Imgur
我上传图片前,图片的档名就已经先预先处理好,数字就是在文章版面顺序
Imgur
只不过,图片上传到Imgur後,顺序并不会照我命名的档名排序(原本的档名也被改掉)

所以我的需求是在图片上面加上一个以数字当浮水印的程序,并且可以批次处里多个档案。
加上去的浮水印,只要能够在Imgur的缩图列表中,可以看到即可。

动工之前请先Google

Imgur
图片要加浮水印,有很多现成的软件可以实现,例如 ffmpeg 下指令就可以完成
但是大叔要练习自己写一个,但又不想花太多时间先Google 这程序有没有人写过
通常有都会范例参考啦! 还可以选喜欢的写法,例如我看到有class的写法就会跳过...
太复杂的也会跳过 XDD
Imgur

开始动工

from PIL import Image,ImageDraw,ImageFont
import os
#图档的资料夹 inpit output 这两个资料夹要跟 这只程序放同一个路径下
#资料夹名字 可以自己改
start_folder="input"
#放置处理好的图档
traget_folder="output"

for i in os.listdir(start_folder):
    #print(i.split('.')[0])
    #档名
    filename=i
    #浮水印文字 1.png  1 就式浮水印的文字内容
    text_msg=i.split('.')[0]
    #图片档
    im=Image.open(start_folder+"/"+i)

    #图片尺寸
    im_w,im_h=im.size

    #字形与大小
    font=ImageFont.truetype("‪C:\Windows\Fonts\FiraCode-Retina.ttf",80)
    fn_w,fn_h=dw.textsize(text_msg,font=font)
    # 浮水印 贴在 图片上面
    dw=ImageDraw.Draw(im)
    
    #设定浮水印 x轴的位置 (置中)
    x=im_w/2-fn_w/2
    #浮水印的 x y轴位置、文字内容、字体颜色
    dw.text((x,0),text_msg,font=font,fill=(255,0,0))
    #im.show()
    #存档 (输出)
    im.save(traget_folder+ '/' + filename)
    im.close()

完成图:
Imgur
附上范例程序的bitbucket连结

可以更完善的部分

这只程序没几行就写完了,其实是可以继续延伸下去,把程序的功能写得更完善
以下是我目前想到可以增加的地方

  • 完整的介面
    如果是单机使用的话可以用GUI介面或者写成网页端的应用
    我会比较倾向用网页的方式解决,因为Python的GUI..很搞肛
    用前端网页的话,多档案的拖曳上传有现成的JQuery的函式库可用

  • 自动传到Imgur
    承上,有一个介面的话,希望可以直接在上面更改档案的名字跟加浮水印
    一键上传到自己的Imgur帐号里指定的相本,并把图片连结照顺序回传给我
    一整个懒人的极致...以上都只是说说而已...如果有人敲碗的话再考虑...

以上就是铁人赛第17天的内容 :)


参考资料


<<:  Day 14 - 委托单建立、修改及取消

>>:  [Day29] 不敢把聊天纪录上传到分析网站? 自己用Python分析LINE聊天纪录!

Day10 PHP数据类型--基本类型之数字与布尔型

这是今天要介绍的详细一点的数据类型: 整型(int/integer) 浮点型(float) 布尔型(...

Day - 12 集合

set 可以使用大括号 { } 或者 set() 函数创建集合,以下为set用法: set 不会包含...

Day 12 跑 Tensorflow Serving Docker 范例

又到了跑范例环节,这次要试着学习 Tensorflow Serving, Tensorflow Se...

[Vue2] 从初学到放弃 Day2

心血来潮 Vue基於 相容性(ie目前已知...恩) 语意化版本 Semantic Versioni...

物理访问控制系统(PACS)-重播攻击(Replay attack)

下图演示了针对生物识别系统的九个攻击点。从传感器到特徵提取器的生物特徵数据的回放是其中之一。 . “...