多图片加水印并合并的方法

小神兽们终于要开学了,但家长们的烦心事一点也没少:学校通知,每天统计每个学生和同住人员的健康码、行程码,并且要合并到一张图上。
起初我觉得这用电脑自带的图片编辑器,不过是ctrl-c + ctrl-v的事嘛,对程序员来说,轻车熟路啊。然而打开我的macbook才发现,这图片编辑器也太难用了吧,根本找不到图片画布大小功能,翻箱倒柜找到我的老Windows,传图》保存到本地〉挨个编辑》加名字文本〉合并,忙活了10分钟,再说每次都要到电脑跟前也费事了。
作为一个有洁癖的码农,决不允许同样的流程化、重复的事件,在我的生活中冗余出现。

于是便有了下面的一键自动合成小程序。

实现效果如下:

WechatIMG33.jpeg

技术栈使用

采用了前后端分离的架构,别问我为啥不直接用js脚本处理图片。

前端

  • Trao、Taro UI(功能比较简单,复杂的逻辑)
  • Dva
  • React

服务端

  • Python
  • flask
  • docker (容器化部署,稳定省心)
  • minio
  • opencv
核心图片处理脚本
# 处理多个图片的拼接
    def join_images(self, work_dir, image_list=[], flag='horizontal', max_height=1280):  # 默认是水平参数
        mark_output_dir = f"{work_dir}/output"
        output_image = f"{work_dir}/joint.png"
        if flag == 'horizontal':
            max_width = 0
            img_list = []
            for image in image_list:
                img_path = f"{work_dir}/{image['file_name']}"
                r_img_path = f"{work_dir}/r_{image['file_name']}"
                mark_img_path = f"{work_dir}/output/r_{image['file_name']}"
                img_byte = Image.open(img_path)
                img, width = self.resize_image(img_byte, max_height)
                img.save(r_img_path)
                add_text = image['add_text'] if image['add_text'] else ''
                self.mark_text(r_img_path, add_text, mark_output_dir)  # 图片添加水印
                max_width += width + 5
                img_new_byte = Image.open(mark_img_path)
                img_list.append(img_new_byte)
            joint = Image.new("RGB", (max_width - 5, max_height))
            pre_img = None
            start = 0
            for index, img in enumerate(img_list):
                if index == 0:
                    joint.paste(img, (0, 0))
                else:
                    start += pre_img.size[0] + 5
                    joint.paste(img, (start, 0))
                pre_img = img
            joint.save(output_image)
            compress_image(output_image, mb=1)
            if os.path.isfile(output_image):
                self.output_image = output_image

结语

功能还在不断完善中,主要先解决自身的使用问题,如果有什么建议欢迎留言反馈。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容