Python 图片处理:裁剪缩放至300×200,格式JPG/PNG/GIF,控制大小≤100KB

Python 图片处理:裁剪缩放至300×200,格式JPG/PNG/GIF,控制大小≤100KB

使用Pillow库,功能:

  1. 强制输出尺寸 300 × 200
  2. 支持输入 JPG,PNG,GIF
  3. 循环调节质量,把文件压到100KB以内
  4. 保存输出文件

安装依赖

复制代码
pip install pillow

完整代码

复制代码
from PIL import Image
import os

def process_image(input_path: str, output_path: str, target_size=(300, 200), max_kb=100):
    """
    处理图片:缩放裁剪到300x200,文件不超过100KB
    :param input_path: 原始图片路径
    :param output_path: 输出保存路径
    :param target_size: (宽,高) 目标尺寸 300*200
    :param max_kb: 最大文件大小 KB
    """
    max_bytes = max_kb * 1024
    width, height = target_size

    img = Image.open(input_path)

    # 缩放+居中裁剪到固定300×200
    img = img.resize(target_size, Image.Resampling.LANCZOS)

    # 区分格式处理
    ext = os.path.splitext(output_path)[1].lower()
    quality = 95

    if ext in [".jpg", ".jpeg"]:
        # JPG 循环降低质量控制体积
        while True:
            img.save(output_path, format="JPEG", quality=quality, optimize=True)
            fsize = os.path.getsize(output_path)
            if fsize <= max_bytes or quality <= 10:
                break
            quality -= 5

    elif ext == ".png":
        img.save(output_path, format="PNG", optimize=True)

    elif ext == ".gif":
        img.save(output_path, format="GIF", optimize=True)

    final_size = os.path.getsize(output_path) / 1024
    print(f"已保存 {output_path} | 尺寸 {img.size} | 文件大小 {final_size:.2f} KB")


if __name__ == "__main__":
    # ========== 修改这里你的输入输出路径 ==========
    INPUT_FILE = "test.png"   # 你的原图
    OUTPUT_FILE = "out.jpg"   # 输出,后缀 .jpg/.png/.gif

    try:
        process_image(INPUT_FILE, OUTPUT_FILE, target_size=(300, 200), max_kb=100)
    except Exception as e:
        print(f"处理出错:{e}")

使用说明

  1. 修改 INPUT_FILE 为你的图片文件路径
  2. 修改 OUTPUT_FILE 设置输出文件名,后缀决定输出格式 .jpg / .png / .gif
  3. 输出强制固定 宽300px,高200px
  4. JPG会自动降低画质,保证文件小于100KB;PNG/GIF受编码限制,如果原图色彩复杂有可能略超100KB。

如果你需要:批量处理文件夹全部图片、不裁剪改为等比例缩放留黑边、或者GUI版本,告诉我,我直接改代码。

相关推荐
我命由我123457 小时前
智能助手通用问答边界
人工智能·python·学习·ai·学习方法·ai编程·智能体
Lhan.zzZ7 小时前
Qt WebEngineView 在 Linux 上无法加载网页:从“看不见 HTML“到“禁用沙箱“
linux·c++·qt
Angeldream1238 小时前
第 4 章 医学影像预处理
图像处理·人工智能·python·医学影像·医学影像处理
Web3&Basketball8 小时前
实测Gemini4Argon:ERQA 87%登顶长程任务榜
数据库·python·大模型·多模态·gemini·长上下文·推理优化
Data analyse4568 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
xiaogai_gai8 小时前
金蝶收料通知单查询策略实战教程:从源系统拉取到中间层落地的完整路径
java·前端·数据库
把我格子衫拿来8 小时前
医学影像重采样:spacing 改了,为什么模型位置也跟着错了?
python·dicom·医学影像·simpleitk·重采样
打工仔折腾 AI8 小时前
用 Dashlet 把极空间 NAS 服务入口整理成统一导航首页的实践
java·开发语言·人工智能·后端·python·rpc·ai agent 实战
wuyk5558 小时前
PyQt6-第05讲-QtDesigner工作流与ui文件
python·ui·pyqt
Fcy6488 小时前
Linux下 多路转接select详解
linux·select·多路转接