首页 > 编程知识 正文

Python批量操作图片

时间:2023-11-19 06:09:33 阅读:292851 作者:UBGV

本文将从多个方面对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))

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。