仝 tóng

Python+PIL(Pillow)批量设置图片大小和添加水印

最近要将自己旅行的照片放到自己搭建的网站上,从相机raw文件导出的相片分辨率为6000*4000,都在25M以上,如果要是上传到服务器上太大了,也会占用太多空间。
Python有很多用途,其中利用Pillow批量更改文件大小真的很方便。

1.安装Python及依赖
最新版的guide对安装方面说的不是很多,建议先看3.0版本的安装,说的很详细。
以Macos为例:

$ brew install python
$ brew install libtiff libjpeg webp little-cms2
$ pip install pillow

这样,pillow就安装完成了。

2.在照片文件下,创建一个 example.py 的文件,执行的时候在terminal中运行 “python example.py” 即可。

以下代码中的后面中文注释不要粘贴,会有错误“SyntaxError: Non-ASCII character”。

  • 将原来的.jpg格式转换成.png格式,或者将原来的.png格式转成.jpg格式:

from PIL import Image
import glob, os

for f in os.listdir('.'):
    if f.endswith('.jpg'):          #//所有以.jpg结尾的文件,如果你是png换成png
        i = Image.open(f)
        fn, fext = os.path.splitext(f)
        i.save('pngs/{}.png'.format(fn))   #//将转换的图片保存在pngs这个文件夹下
  • 将图片的分辨率设置成固定分辨率:

from PIL import Image
import glob, os

size = 900, 900      #//设置分辨率为900*900

for f in os.listdir('.'):
    if f.endswith('.jpg'):
        i = Image.open(f)
        fn, fext = os.path.splitext(f)

        i.thumbnail(size)
        i.save('pngs/{}.png'.format(fn, fext))
    
  • 按比例设置图片的分辨率,譬如1/3:

from PIL import Image
import glob, os

for f in os.listdir('.'):
    if f.endswith('.jpg'):
        i = Image.open(f)
        fn, fext = os.path.splitext(f)

        i.thumbnail(tuple(size//3 for size in i.size))   #//原图片1/3的分辨率
        i.save('pngs/{}.png'.format(fn, fext))
  • 批量添加水印

from PIL import Image
import glob, os

wsize = 200,200     #//设置水印图片大小

for f in os.listdir('.'):
    if f.endswith('.jpg'):
        i = Image.open(f)
        w = Image.open('tonglei.png')     #//水印图片的路径及名称
        fn, fext = os.path.splitext(f)

        i.thumbnail(tuple(size//3 for size in i.size))   #//原图片1/3的分辨率
        w.thumbnail(wsize)               #//重置水印图片大小
        i.paste(w, None, w)              #//将水印图片粘贴进入图片
        i.save('pngs/{}.png'.format(fn, fext))

同时要注意代码格式要对齐,不对齐会有错误。

resize.png

发表新评论