首页
   /       /   
使用 Python Flask 构建图片压缩 API
12月
14
使用 Python Flask 构建图片压缩 API
作者: 大彭Sir    分类: 程序源码     正在检查是否收录...

图片压缩在现代网络应用中非常重要,它能够减少图片的大小,从而加快加载速度并节省存储空间。在本文中,我们将展示如何使用 Python 和 Flask 框架构建一个简单的图片压缩 API,用户可以上传图片并选择压缩质量。
使用 Python Flask 构建图片压缩 API

代码实现

我们使用了 Flask 作为 API 框架,并借助 Python Imaging Library(Pillow)来处理图片压缩。以下是完整代码:

# 菲律宾签证网:www.bosenvisa.com
from flask import Flask, request, send_file, jsonify
from PIL import Image
import io
import os

app = Flask(__name__)

# 创建文件上传目录
UPLOAD_FOLDER = 'uploads'
if not os.path.exists(UPLOAD_FOLDER):
    os.makedirs(UPLOAD_FOLDER)

app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

@app.route('/compress', methods=['POST'])
def compress_image():
    try:
        # 检查是否上传了文件
        if 'image' not in request.files:
            return jsonify({"error": "No image file uploaded."}), 400

        image_file = request.files['image']

        # 检查是否指定了质量参数
        quality = request.form.get('quality', type=int)
        if not quality or not (1 <= quality <= 100):
            return jsonify({"error": "Invalid or missing quality parameter. Must be between 1 and 100."}), 400

        # 打开上传的图片
        img = Image.open(image_file)

        # 压缩图片并保存到内存中
        img_format = img.format if img.format else 'JPEG'  # 默认使用JPEG格式
        buffer = io.BytesIO()
        img.save(buffer, format=img_format, quality=quality)
        buffer.seek(0)

        # 返回压缩后的图片
        return send_file(buffer, mimetype=f'image/{img_format.lower()}', as_attachment=True, download_name=f'compressed.{img_format.lower()}')

    except Exception as e:
        return jsonify({"error": str(e)}), 500

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

主要功能

  1. 上传图片:用户可以通过 POST 请求上传图片。
  2. 设置质量:支持用户设置压缩质量(1-100),数值越低,图片压缩率越高。
  3. 返回压缩图片:API 会即时返回压缩后的图片,而不会在服务器上保存。

如何运行

  1. 安装依赖
    在运行代码之前,请确保安装了必要的 Python 库:

    pip install flask pillow
  2. 运行服务
    保存代码为 app.py,然后运行:

    python app.py

    服务器会启动在默认端口 5000

  3. 测试 API
    使用 curl 或 Postman 测试该 API:

    curl -X POST -F "image=@example.jpg" -F "quality=50" https://bosenvisa.com/post/71 --output compressed.jpg

    上述命令会上传 example.jpg 并返回压缩后的 compressed.jpg

核心逻辑解析

  • 上传目录的创建
    代码中为上传图片指定了 uploads 目录,并动态创建该目录。如果有长期存储需求,可扩展此部分以保存上传文件。

    if not os.path.exists(UPLOAD_FOLDER):
      os.makedirs(UPLOAD_FOLDER)
  • 图片质量校验
    API 要求用户提供一个 1 到 100 的整数作为图片质量参数。数值越低,图片的压缩率越高,但质量可能会降低。

    quality = request.form.get('quality', type=int)
    if not quality or not (1 <= quality <= 100):
      return jsonify({\"error\": \"Invalid or missing quality parameter.\"}), 400
  • 动态格式支持
    代码会根据上传图片的格式动态选择保存方式,默认使用 JPEG 格式。确保 API 能兼容多种图片类型(如 PNG, JPEG)。

    img_format = img.format if img.format else 'JPEG'

应用场景

  1. 电商网站:通过压缩图片,减少产品展示页面的加载时间。
  2. 社交媒体:用户上传图片时进行压缩,减少存储成本。
  3. 云服务平台:为开发者提供图片优化服务。

注意事项

  • 安全性:生产环境下应关闭 debug 模式,并设置图片上传大小的限制。
  • 文件类型验证:建议增加文件类型检查,确保上传的是合法图片文件。
  • 扩展功能:可以进一步支持批量图片压缩和更多格式的转换。

总结

本文介绍了如何使用 Flask 和 Pillow 构建一个简单的图片压缩 API。通过这种方式,可以高效处理图片优化需求,提升应用性能。希望本文能对你有所帮助!

责任声明:本页信息由网友自行发布或来源于网络,真实性、合法性由发布人负责,请仔细甄别!本站只为传递信息,我们不做任何双方证明,也不承担任何法律责任。文章内容若侵犯你的权益,请联系本站删除!
转载声明:本文作者 大彭Sir,如需转载请保留文章出处!原文链接请自行复制!

评论

Theme By Brief 鄂ICP备19010459号

sitemap

首页

分类

友链