一、图片存储策略
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);
});