一、图片存储策略

1. 直接存储图片文件(BLOB类型)

优点

  • 减少对文件系统的依赖。
  • 图片管理集中,便于维护。

缺点

  • 增加数据库的负担,特别是在高并发情况下。
  • 数据库的存储空间占用大。

适用场景

  • 图片数量较少,对数据库性能影响不大。

2. 存储图片路径

优点

  • 减轻数据库的压力。
  • 方便进行文件系统的管理。

缺点

  • 增加对文件系统的依赖。
  • 图片管理分散,可能存在文件路径错误等问题。

适用场景

  • 图片数量较多,对数据库性能影响较大。

二、图片读取操作

1. 使用BLOB类型读取图片

SELECT image FROM images WHERE id = 1;

2. 使用图片路径读取图片

SELECT image_path FROM images WHERE id = 1;

三、图片处理技巧

1. 图片压缩

from PIL import Image
import io

def compress_image(image_path, output_path, quality=85):
    with Image.open(image_path) as img:
        img.save(output_path, "JPEG", optimize=True, quality=quality)

# 压缩图片
compress_image("path/to/image.jpg", "path/to/compressed_image.jpg")

2. 图片缓存

from cachetools import cached, TTLCache

@cached(TTLCache(maxsize=100, ttl=3600))
def get_image(image_id):
    # 从数据库中读取图片
    # ...

# 获取图片
image = get_image(1)

3. 图片懒加载

document.addEventListener("DOMContentLoaded", function() {
    const images = document.querySelectorAll("img.lazy");

    function lazyLoad() {
        images.forEach((img) => {
            if (img.getBoundingClientRect().top < window.innerHeight) {
                img.src = img.getAttribute("data-src");
                img.classList.remove("lazy");
            }
        });
    }

    lazyLoad();
    window.addEventListener("scroll", lazyLoad);
});

四、总结