🖼️ 模型概览

ImageGallery模型是一个功能强大的图片资源管理系统,提供图片上传、智能处理、多尺寸生成、EXIF信息提取、颜色分析等完整功能。适用于图片库、素材库、相册等场景。

✨ 核心功能特性

1. 智能图片处理

  • 多尺寸自动生成:支持5种预设尺寸
  • EXIF信息提取:自动读取图片元数据
  • 颜色分析:提取主色调(5种颜色)
  • 宽高比计算:自动计算并标准化宽高比
  • 文件去重:SHA256哈希值检测重复图片

2. 多尺寸图片系统

 
# 5种预设尺寸
ImageSizePreset.ORIGINAL    # 原始尺寸
ImageSizePreset.LARGE       # 大图(1920px宽)
ImageSizePreset.MEDIUM      # 中图(1280px宽)
ImageSizePreset.SMALL       # 小图(640px宽)
ImageSizePreset.THUMBNAIL   # 缩略图(320px宽)
 
 

3. 完整元数据管理

  • EXIF信息:自动提取50+种图片元数据
  • 版权管理:4种授权协议选择
  • 来源标注:作者、来源信息记录
  • ALT文本:无障碍访问和SEO优化

4. 内容关联与组织

  • 分类管理:图片分类归档
  • 标签系统
    • 关联标签:手动选择
    • 动态标签:标题模糊匹配
  • 封面标记:可设为分类封面图片
  • 智能搜索:基于标签、颜色、尺寸等筛选

5. 版权与授权管理

  • 4种授权协议
    • CC BY-NC 4.0:知识共享-署名非商业
    • CC BY-SA 4.0:知识共享-署名相同方式共享
    • COPYRIGHT:保留所有权利
    • PUBLIC:公有领域
  • 作者信息:记录图片创作者
  • 来源标注:明确图片来源

6. SEO与优化

  • 自动SEO:继承SEOMixin,自动生成SEO信息
  • ALT优化:图片替代文本优化
  • 规范URL:唯一URL标识
  • Open Graph:社交媒体图片优化

7. 权限与工作流

  • 7种状态管理:完整的内容审核流程
  • 权限控制:用户组访问限制
  • 评论管理:支持图片评论
  • 推荐系统:精选图片标记

🎯 后台使用指南

1. 上传图片

步骤1:基础信息填写
 
标题:[必填] 图片标题
副标题:[选填] 图片描述补充
图片:[必填] 上传原始图片
ALT文本:[选填] 用于无障碍访问和SEO
作者:[选填] 图片作者
来源:[选填] 图片来源,默认"本站原创"
 
 
步骤2:分类与标签
 
所属分类:[必选] 选择图片分类
关联标签:[可选] 手动添加关键词标签
动态标签:[自动] 系统根据标题自动匹配标签
设为封面:[可选] 是否作为分类封面图片
 
 
步骤3:版权与授权
 
版权协议:[必选] 选择图片授权方式
- CC BY-NC 4.0:可共享、修改,需署名且非商业
- CC BY-SA 4.0:可共享、修改,需署名且相同方式共享
- COPYRIGHT:保留所有权利
- PUBLIC:公有领域,无版权限制
 
 
步骤4:内容编辑
 
内容:[选填] 图片详细描述
内容编辑:[自动] 当前操作用户
缩略图:[可选] 封面图片
个性模板:[可选] 自定义展示模板
 
 
步骤5:权限设置
 
审核状态:[必选] 选择图片状态
仅工作人员可见:[可选] 内部使用
允许访问的用户组:[可选] 限制用户组
允许评论:[可选] 控制评论权限
推荐:[可选] 设为精选图片
 
 
步骤6:SEO设置
 
SEO标题:[自动] 留空使用图片标题
SEO描述:[自动] 留空自动生成
SEO关键词:[选填] 用英文逗号分隔
URL标识:[自动] 自动生成唯一slug
 
 

2. 图片处理流程

上传时自动处理
  1. EXIF信息提取:自动读取图片元数据
  2. 颜色分析:提取5种主色调
  3. 宽高比计算:计算并标准化比例
  4. 文件哈希:生成SHA256用于去重
  5. 多尺寸生成:生成5种预设尺寸
EXIF信息示例
 
{
  "Image ImageWidth": "1920",
  "Image ImageLength": "1080",
  "Image Model": "Canon EOS R5",
  "Image DateTime": "2023:10:15 14:30:25",
  "EXIF ExposureTime": "1/250",
  "EXIF FNumber": "f/2.8",
  "EXIF ISOSpeedRatings": "100",
  "GPS GPSLatitude": "31.230416",
  "GPS GPSLongitude": "121.473701"
}
 
 
颜色调色板
 
# 提取5种主色
colorpalette = [
  '#FF5733',  # 主色调1
  '#33FF57',  # 主色调2
  '#3357FF',  # 主色调3
  '#F3FF33',  # 主色调4
  '#FF33F3'   # 主色调5
]
 
 

3. 多尺寸图片使用

在模板中调用
 
{# 获取不同尺寸的图片URL #}
原始图: {{ image.image.url }}
大图(1920px): {% widthurl image 1920 %}
中图(1280px): {% widthurl image 1280 %}
小图(640px): {% widthurl image 640 %}
缩略图(320px): {% width_url image 320 %}

{# 使用属性方法 #} {{ image.imgpath('large') }} # 大图路径 {{ image.imgpath('medium') }} # 中图路径 {{ image.imgpath('small') }} # 小图路径 {{ image.imgpath('thumbnail') }}# 缩略图路径

 
 
尺寸配置
 
SIZEMAP = {
    'large': (1920, 9999),     # 宽度1920px,高度自适应
    'medium': (1280, 9999),    # 宽度1280px,高度自适应
    'small': (640, 9999),      # 宽度640px,高度自适应
    'thumbnail': (320, 9999)   # 宽度320px,高度自适应
}
 
 

4. 工作流程

 
上传图片 → 已入库
    ↓
编辑信息 → 草稿状态
    ↓
提交审核 → 已提交 → 审核中
    ↓                        ↓
直接发布 → 已发布        审核通过 → 已发布
                          ↓
                      审核驳回 → 修改后重新提交
 
 
状态说明
  • 已入库(0):新上传图片默认状态
  • 草稿(1):编辑中,未提交审核
  • 已提交(2):已提交等待审核
  • 审核中(3):正在审核
  • 已通过(4):审核通过待发布
  • 已发布(99):已正式发布
  • 已驳回(5):审核未通过
  • 已归档(6):历史归档

5. URL访问规则

支持5种URL风格:
  • 模型路径/image/123.html
  • 单级Slug/gallery/123.html
  • 多级Slug/gallery/nature/123.html
  • 随机字符/jklfdsa/1.html
  • 自定义路径/mygallery/myphoto/1.shtml
实际生成路径:/image/{标识}{后缀}/image/{哈希值}{后缀}

📊 字段说明速查

字段分组
字段名
说明
必填
默认值
图片信息
image
原始图片
-
 
alttext
ALT文本
 
aspectratio
宽高比
自动
 
iscover
设为封面
False
元数据
exifinfo
EXIF信息
自动
null
 
colorpalette
主色调
自动
null
 
filehash
文件哈希
自动
版权信息
license
版权协议
CC BY-NC 4.0
 
author
作者
 
source
来源
本站原创
分类标签
category
所属分类
-
 
relatedtags
关联标签
 
filteredtags
动态标签
自动
基础信息
title
图片标题
-
 
subtitle
副标题
 
content
描述内容
 
thumbimage
缩略图
 
template
个性模板
 
pytitle
标题拼音
自动
权限控制
status
审核状态
99(已发布)
 
staffonly
仅员工可见
False
 
allowedgroups
允许用户组
 
allowcomment
允许评论
True
统计导航
hits
点击量
自动
0
 
istop
是否推荐
False
 
previousobj
上一篇
null
 
nextobj
下一篇
null
关联信息
editor
内容编辑
当前用户
继承字段
所有SEOMixin字段
SEO优化
自动/手动
-

🔧 图片处理详解

1. EXIF信息提取

支持的EXIF字段(部分):
 
基础信息:图像宽度、高度、分辨率、设备信息
拍摄信息:光圈、快门、ISO、焦距、曝光模式
位置信息:GPS经纬度、海拔、时间戳
相机信息:品牌、型号、镜头信息
色彩信息:白平衡、色彩空间、场景模式
 
 
字段映射:系统自动将英文EXIF标签转换为中文描述

2. 颜色分析算法

提取流程
  1. 使用ColorThief库分析图片颜色
  2. 提取5种主要颜色
  3. 转换为16进制格式
  4. 按出现频率排序存储
输出格式
 
["#FF5733", "#33FF57", "#3357FF", "#F3FF33", "#FF33F3"]
 
 

3. 多尺寸生成策略

存储结构
 
media/content/gallery/processed/
├── 1origin.jpg     # 原始图片
├── 1large.jpg     # 1920px宽
├── 1medium.jpg    # 1280px宽
├── 1small.jpg     # 640px宽
└── 1thumbnail.jpg # 320px宽
 
 
处理规则
  • 宽度优先,高度自适应
  • 保持原始宽高比
  • JPEG格式,高质量压缩
  • 渐进式加载优化

4. 文件去重机制

哈希计算
 
# 使用SHA256算法
filehash = hashlib.sha256(imgcontent).hexdigest()
 
 
去重逻辑
  1. 上传时计算文件哈希
  2. 检查数据库中是否已存在相同哈希
  3. 如存在,提示用户或自动关联
  4. 避免重复存储相同图片

🎨 模板使用技巧

1. 图片尺寸调用

 
{# 使用自定义模板标签 #}
{% load image_tags %}

{# 获取指定宽度图片URL #} <img src="{% widthurl image 1920 %}" alt="{{ image.alttext }}">

{# 响应式图片 #} <picture> <source media="(min-width: 1200px)" srcset="{% widthurl image 1920 %}"> <source media="(min-width: 768px)" srcset="{% widthurl image 1280 %}"> <source media="(max-width: 767px)" srcset="{% widthurl image 640 %}"> <img src="{% widthurl image 320 %}" alt="{{ image.alttext }}"> </picture>

 
 

2. EXIF信息展示

 
{# 显示相机信息 #}
{% if image.exifinfo %}
  <div class="exif-info">
    <p>相机: {{ image.exifinfo.Make }} {{ image.exifinfo.Model }}</p>
    <p>参数: {{ image.exifinfo.FNumber }} {{ image.exifinfo.ExposureTime }} ISO{{ image.exifinfo.ISOSpeedRatings }}</p>
    {% if image.exifinfo.GPSLatitude %}
      <p>位置: {{ image.exifinfo.GPSLatitude }}, {{ image.exifinfo.GPSLongitude }}</p>
    {% endif %}
  </div>
{% endif %}
 
 

3. 颜色调色板展示

 
{# 显示主色调 #}
{% if image.colorpalette %}
  <div class="color-palette">
    {% for color in image.colorpalette %}
      <div class="color-sample" style="background-color: {{ color }};" title="{{ color }}"></div>
    {% endfor %}
  </div>
{% endif %}
 
 

4. 版权信息展示

 
{# 根据授权协议显示 #}
<div class="license-info">
  {% if image.license == 'CC BY-NC 4.0' %}
    <a href="https://creativecommons.org/licenses/by-nc/4.0/deed.zh" target="blank">
      CC BY-NC 4.0
    </a>
  {% elif image.license == 'CC BY-SA 4.0' %}
    <a href="https://creativecommons.org/licenses/by-sa/4.0/deed.zh" target="blank">
      CC BY-SA 4.0
    </a>
  {% elif image.license == 'COPYRIGHT' %}
    <span>版权所有 © {{ image.author|default:"未知" }}</span>
  {% else %}
    <span>公有领域</span>
  {% endif %}
</div>
 
 

💡 最佳实践建议

1. 图片优化

  • 格式选择:优先使用WebP格式,JPEG次之
  • 尺寸控制:原始图片不超过5MB
  • 分辨率建议:宽度建议1920px-4000px
  • 命名规范:使用英文、数字、下划线命名

2. 元数据管理

  • 保留重要EXIF:保留版权、作者、位置信息
  • 清理隐私信息:发布前清理GPS位置等敏感信息
  • 添加水印:商业图片建议添加版权水印

3. 分类与标签

  • 分类体系:建立清晰的分类层级
  • 标签规范:使用统一的标签命名规范
  • 动态标签:利用自动分词功能提高标签覆盖率
  • 封面管理:每个分类设置1-2张封面图

4. 版权管理

  • 明确授权:每张图片必须选择授权协议
  • 注明来源:准确填写作者和来源信息
  • 合规使用:确保拥有图片使用权或符合授权要求
  • 水印策略:重要图片添加可见或不可见水印

5. 性能优化

  • 启用CDN:图片资源使用CDN加速
  • 懒加载:列表页使用图片懒加载
  • 响应式图片:根据设备加载合适尺寸
  • 浏览器缓存:设置合适的缓存头

6. SEO优化

  • ALT文本:每张图片填写描述性ALT文本
  • 文件名:使用有意义的文件名
  • 结构化数据:添加图片结构化数据
  • 站点地图:包含图片到站点地图

7. 安全管理

  • 文件类型验证:限制上传文件类型
  • 病毒扫描:上传时进行病毒检测
  • 权限控制:敏感图片设置访问权限
  • 定期备份:定期备份图片和元数据

🔍 高级搜索功能

1. 按颜色搜索

 
# 搜索特定颜色的图片
ImageGallery.objects.filter(
    colorpalettecontains=['#FF5733']
)
 
 

2. 按EXIF搜索

 
# 搜索特定相机拍摄的图片
ImageGallery.objects.filter(
    exifinfoModel__icontains='Canon'
)

搜索特定参数的图片

ImageGallery.objects.filter( exifinfoFNumber='f/2.8', exifinfoISOSpeedRatings='100' )

 
 

3. 按尺寸搜索

 
# 搜索特定宽高比的图片
ImageGallery.objects.filter(
    aspect_ratio='16:9'
)

搜索特定尺寸范围的图片

from PIL import Image img = Image.open(image.file) width, height = img.size ImageGallery.objects.filter( imagewidthgte=1920, imageheightgte=1080 )

 
 
这个图库模型提供了从上传、处理、管理到展示的完整解决方案,特别适合摄影网站、素材库、电商平台、新闻媒体等需要大量图片管理的场景。