V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
cc7756789
V2EX  ›  Python

Python 如何批量合成价格水印图片?

  •  
  •   cc7756789 · 2020-05-11 20:26:48 +08:00 · 2706 次点击
    这是一个创建于 1681 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网上看了不少教程,都没有满意的,不是全用一样的水印,就是大小、位置、分辨率、字体这些都没有介绍。现在的需求是这样:

    产品主图需要打上不同价格的水印。 水印是一个简单的图形,扁平图案这种,在上面打上不同的价格。 但问题是不同货号的产品价格不一样。 用 PS 一个个做太烦了。 以前写过代码,现在干美工。基础知识是不用考虑的。 那么问题来了,python 有无好用方便的库。

    把货号和对应价格写在 Excel 里。 但是一张透明背景的 png,如何把对应数字合成在上面,有字体要求(大小、字间距、颜色、字体家族),也有位置要求,以及大小,分辨率要求。 合成了价格水印之后,通过水印图片名称和主图图片名称匹配,然后再次合成到主图的某个位置。 以下是思维导图。

    6 条回复    2020-05-12 16:46:09 +08:00
    iConnect
        1
    iConnect  
       2020-05-11 20:39:11 +08:00 via Android
    手写一个也不麻烦:读 Excel,然后 pillow 合成图片。
    AlisaDestiny
        2
    AlisaDestiny  
       2020-05-12 00:12:40 +08:00
    就是说根据不同型号生成不同的价格水印,再贴到物品图上把。这也不难啊。手里有锤子还怕没办法处理各种形状的钉子。
    niqiu8
        3
    niqiu8  
       2020-05-12 08:32:27 +08:00 via Android
    活动打标??干嘛不用 ps 或者 ai 的变量功能? python 的话 pillow 可以实现
    chaneyccy
        4
    chaneyccy  
       2020-05-12 09:18:07 +08:00
    没记错的话 PS 批处理也可以实现吧
    cra2y4ngel
        5
    cra2y4ngel  
       2020-05-12 09:35:17 +08:00
    from PIL import Image,ImageDraw,ImageFont

    im = Image.open('my_pic.png')

    w, h = im.size

    watermark = Image.new('RGBA', im.size) # 水印

    draw = ImageDraw.Draw(watermark, 'RGBA')

    # 设置文字大小

    font_size = 180

    # 设置字体
    font_file = "C:\\Windows\\Font\\simsun.ttc"

    font = ImageFont.truetype(font_file,font_size )

    draw.text((0, 0), '这是水印内容', fill="#ff0000", font=font)
    # 第一个参数:表示文字起始坐标
    # 第二个参数:表示写入内容
    # fill:表示颜色
    # font:字体


    # 旋转 45 度
    watermark = watermark.rotate(-45, Image.BICUBIC)

    # 透明的
    alpha = watermark.split()[3]
    alpha = ImageEnhance.Brightness(alpha).enhance(0.7)
    watermark.putalpha(alpha)

    # 合成新的图片
    n = Image.composite(watermark, im, watermark)
    n.save('new_watermark.png', 'PNG')
    sunmker
        6
    sunmker  
       2020-05-12 16:46:09 +08:00
    使用 ImageMagick 写个小脚本
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4123 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 05:28 · PVG 13:28 · LAX 21:28 · JFK 00:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.