本文将从多个方面对Python批量操作图片进行详细的阐述,包括图片的读取、修改和保存,图片的剪裁、缩放和旋转,图片的批量处理和压缩等。通过本文的学习,读者可以掌握使用Python进行图片处理的基本技能。
一、图片的读取、修改和保存
在Python中,我们可以使用第三方库Pillow(也称为PIL)来操作图片。使用Pillow,我们可以轻松的读取、修改和保存图片。
1、读取图片
from PIL import Image
im = Image.open('test.jpg')
im.show()
2、修改图片
from PIL import Image
im = Image.open('test.jpg')
r, g, b = im.split()
om = Image.merge("RGB", (g, r, b))
om.show()
3、保存图片
from PIL import Image
im = Image.open('test.jpg')
r, g, b = im.split()
om = Image.merge("RGB", (g, r, b))
om.save('output.jpg')
二、图片的剪裁、缩放和旋转
在基本的图片操作之外,剪裁、缩放和旋转是我们经常需要用到的功能。下面我们将分别介绍如何使用Pillow实现这些功能。
1、剪裁图片
from PIL import Image
im = Image.open('test.jpg')
region = (100, 100, 400, 400)
crop_im = im.crop(region)
crop_im.show()
2、缩放图片
from PIL import Image
im = Image.open('test.jpg')
size = (im.width//2, im.height//2)
im.thumbnail(size)
im.show()
3、旋转图片
from PIL import Image
im = Image.open('test.jpg')
rotate_im = im.rotate(45)
rotate_im.show()
三、图片的批量处理
当我们需要对多个图片进行相同的操作时,手动一个一个处理显然非常费时。这时,我们可以使用Python进行批量处理,大大提高操作效率。
1、批量缩放图片
from PIL import Image
import os
dir_path = 'image_dir'
files = os.listdir(dir_path)
for file in files:
img = Image.open(os.path.join(dir_path, file))
size = (img.width//2, img.height//2)
img.thumbnail(size)
img.save(os.path.join(dir_path, "sm_" + file))
2、批量旋转图片
from PIL import Image
import os
dir_path = 'image_dir'
files = os.listdir(dir_path)
for file in files:
img = Image.open(os.path.join(dir_path, file))
rotate_img = img.rotate(45)
rotate_img.save(os.path.join(dir_path, "rotate_" + file))
四、图片的压缩
当我们需要上传或者传输大量图片时,为了节省网络带宽和空间,我们通常需要对图片进行压缩。下面是一个使用Pillow实现图片压缩的示例代码。
from PIL import Image
import os
def compress_image(infile, outfile):
"""将图片压缩到100KB以下"""
max_size = 100 * 1024 # 最大尺寸
with Image.open(infile) as im:
while True:
im.save(outfile, "JPEG", quality=50)
size = os.path.getsize(outfile)
if size < max_size:
break
im = im.resize((int(im.width * 0.9), int(im.height * 0.9)))
dir_path = 'image_dir'
files = os.listdir(dir_path)
for file in files:
compress_image(os.path.join(dir_path, file), os.path.join(dir_path, "compressed_" + file))