戊辰人博客

青,取之于蓝而青于蓝;冰,水为之而寒于水。

Python之利用PIL批量给图片添加文字

日期:2017年04月11日 作者: 分类:编程 阅读:626

因为略懂Photoshop,所以接到一个任务:将公司所有的产品图片整理出来,并在图片中写明产品的品牌和型号,然后分类放在iPad中方便给客户展示。

WTF,几千张图片,用PS一个个打开添加文字,这会把人弄疯的,作为一个懒人,做这种大量机械性的重复工作显然不是我的追求,于是就想到用程序自动实现。

一、使用Python和PIL图片处理库

思路:所有图片的文件名都是以品牌+型号的方式命名,所以先用python读取当前目录下所有文件,得到文件名后我们就可以得到当前图片的品牌型号字符串,然后根据图片像素大小自动判断合适的字体大小,再利用PIL库给原图片加上文字水印(品牌型号),然后将处理后的图片保存在当前目录下的new子文件夹。

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

import os
import sys

import PIL
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

# 设置文字水印
def set_water_text(imagefile, text):

    img = Image.open(imagefile)
    (img_x, img_y) = img.size
    
    # 文字字体像素高度为图片高度的 1/20
    ttfont = ImageFont.truetype('/usr/share/fonts/noto/NotoSansCJK-Regular.ttc', int(img_y/20))

    draw = ImageDraw.Draw(img)
    draw.text((int(img_x/20), img_y - int((img_y*1.3)/20)), text, (0,0,0), font=ttfont)

    newdir = "new"
    if not os.path.exists(newdir):
        os.mkdir(newdir)

    img.save(newdir + '/' + text + '.jpg', 'jpeg')

if __name__ == '__main__':
    files = os.listdir(os.getcwd())
    for filename in files:
        if 'jpg' == filename.split('.')[-1].lower() or 'png' == filename.split('.')[-1].lower():
            set_water_text(filename, filename.split('.')[0])
            print(filename)

阅读全文…

Python之PIL图片处理

日期:2015年12月28日 作者: 分类:编程 阅读:1,387

由于工作原因需要将大量jpg图片文件缩放成宽度为1000像素的图片上传,最初是用图片处理工具进行一张张处理,但效率十分低下,于是就自己动手用Python实现一个批量处理工具。

PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。

在Debian/Ubuntu Linux下直接通过apt安装:

sudo apt-get install python-imaging

为了方便不同宽度的需求,程序要支持指定宽度,缩放后的图片保存在当前目录下的子目录中。程序代码如下

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Filename: resize-img.py
# require: python-pil python-imaging

import os
import sys
import Image

# 重新设置图片大小
def resize_img(width, filename):
    newdir = "size_" + str(width)
    if not os.path.exists(newdir):
        os.mkdir(newdir)
    img = Image.open(filename)
    (x, y) = img.size

    x_s = width
    y_s = y * x_s / x

    out = img.resize((x_s, y_s), Image.ANTIALIAS)
    out.save(newdir + '/' + filename, 'jpeg');


if __name__ == "__main__":
    if len(sys.argv) != 2:
        print 'usage: ' + sys.argv[0] + " width(px)"
        print 'e.g. : ' + sys.argv[0] + " 1000"
        sys.exit(1)

    files = os.listdir(os.getcwd())
    for filename in files:
        if 'jpg' == filename.split('.')[-1].lower():
            resize_img(int(sys.argv[1]), filename)
            print 'resize ' + filename + ' succes'

阅读全文…

Python解决生活问题之闹钟程序的实现

日期:2015年09月18日 作者: 分类:编程 阅读:1,013

昨天下班回家忘了带手机充电器,手机熄火没闹钟了,可现实是迟到30分钟以内要罚100RMB,超过30分钟算旷工要扣除3天工资,想想这代价,好吧,还是自己动手写一个闹钟程序吧!

系统环境: Linux Mint Debian Edition 2

软件需求:1. mpg123 (用来播放闹钟铃声)   2. python2.7.x(开发语言环境,本系统已经自带)

1.安装字符模式下的播放器mpg123

sudo apt-get install mpg123

2.编写闹钟程序代码

#!/usr/bin/env python
# -*- coding: utf8 -*-
import time
import os
import sys
from subprocess import call

# When get up ?
h = 7
m = 40

loop = True
while(loop):
    # now
    dt = list(time.localtime())
    hour = dt[3]
    minute = dt[4]

    # get up ?
    if h == hour and m == minute:
        return_code = call("/usr/bin/mpg123 我只在乎你.mp3", shell=True)
        loop = False

    # display current time
    timestr = "%04d-%02d-%02d %02d:%02d:%02d\r" \
            % (dt[0], dt[1], dt[2], dt[3], dt[4], dt[5])
    sys.stdout.write(timestr)
    sys.stdout.flush()
    time.sleep(1)
    # end

阅读全文…