侧边栏壁纸
博主头像
RootNode‘s Blog

人大部分是漫无目的的走

  • 累计撰写 22 篇文章
  • 累计创建 21 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

Python自动下载并压缩图片

RootNode
2024-12-28 / 0 评论 / 0 点赞 / 38 阅读 / 0 字

环境需求

Python3.X

Pillow

request

Pillow简介

Pillow 是 Python Imaging Library (PIL) 的一个分支,旨在提供一个更易于使用且功能更强大的图像处理库。Pillow 支持打开、操作和保存多种格式的图片,是 Python 中图像处理的标准库之一。

主要功能

  1. 图像打开与保存

    • Pillow 可以打开多种格式的图像文件,如 JPEG、PNG、GIF、BMP、TIFF 等。它也支持将图像保存为多种格式。

  2. 图像处理

    • Pillow 提供了一系列操作,如缩放、剪切、旋转、翻转、调整亮度、对比度、色彩等。

    • 支持对图像进行滤镜和特效操作,例如模糊、锐化、边缘检测等。

  3. 图像创建

    • 可以生成新图像,包括创建空白图像、生成图形和绘制文本。

  4. 支持透明度

    • 支持 RGBA 图像格式,可以处理带有透明度通道的图像。

  5. 图像过滤和变换

    • 可以应用各种过滤器进行图像平滑和增强。

    • 支持几何变换,如旋转、平移和缩放。

  6. 图像数量处理

    • 能够处理多个图像并在内存中进行操作,如 GIF 动画的每一帧

安装 Pillow

pip install Pillow
//conda用以下命令
conda install Pillow

基本用法示例

打开和显示图像

from PIL import Image

# 打开图像
image = Image.open('example.jpg')

# 显示图像
image.show()

图像缩放和保存

# 缩放图像
resized_image = image.resize((800, 600))

# 保存缩放后的图像
resized_image.save('resized_example.jpg')

应用滤镜

from PIL import ImageFilter

# 应用模糊滤镜
blurred_image = image.filter(ImageFilter.BLUR)

# 保存模糊后的图像
blurred_image.save('blurred_example.jpg')

绘制文本

from PIL import ImageDraw, ImageFont

# 创建一个空白图像来绘制
new_image = Image.new('RGB', (200, 100), color = (255, 255, 255))
draw = ImageDraw.Draw(new_image)

# 使用默认字体绘制文本
draw.text((10, 10), "Hello, Pillow!", fill=(0, 0, 0))

# 保存绘制后的图像
new_image.save('text_example.jpg')

代码实现

import requests # type: ignore
from PIL import Image # type: ignore
import os
# API 列表
# https://source.unsplash.com/1600x900/?nature,water
# https://api.btstu.cn/sjbz/api.php?lx=dongman&format=images  类型:lx fengjing dongman suiji



class DownLoadImage:
    def __init__(self,url):
        self.url = url
        self.width = 1600
        self.height = 900
        self.content = 'fengjing'

    def getImage(self):
        response = requests.get(self.url+'?lx='+self.content+'&format=json/images')
        response.encoding = 'utf-8'
        if response.status_code == 200:
            data = response.content
            return data
        else:
            print('内容获取失败')


    
    def writeImage(self,data,i):
        with open(f'{filePath}F{i+1}.jpg','wb') as file:
            file.write(data)

    def compressImage(self):
        for i in os.listdir('image/'):
            data = Image.open(f'image/{i}')
            data = data.resize((data.size[0]//4,data.size[1]//4),Image.LANCZOS)
            if data.mode == 'RGBA':
                background = Image.new("RGB", data.size, (255, 255, 255))  # 白色背景
                background.paste(data, (0, 0), data)
                data = background
            data.save(f'compress/{i}', "JPEG", quality=50)

if __name__ == '__main__':
    filePath = 'image/'
    number = 0
    image = DownLoadImage('https://api.btstu.cn/sjbz/api.php')
    # for i in range(65,100):
    #     image.writeImage(image.getImage(),i)
    image.compressImage()

0

评论区