图片加载优化(缩略图)

缩略图

系统目前的问题:首页直接加载原图,原图文件通常比缩略图大数倍甚至数十倍,不仅导致加载时间长,还会造成大量流量浪费。

解决方案:上传图片时,同时生成一份较小尺寸的缩略图。用户浏览图片列表时加载缩略图,只有在进入详情页或下载才加载原图。

实现方案

生成缩略图的方法和“图片压缩”一致,可以使用本地图像处理类库,也可以利用第三方云服务完成。

第三方云服务的参数:

后端开发

1)数据表 picture 新增缩略图字段:

ALTER TABLE picture-- 添加新列ADD COLUMN thumbnailUrl varchar(512) NULL COMMENT '缩略图 url';

2)PictureMapper.xml 新增缩略图字段:

<result property="thumbnailUrl" column="thumbnailUrl" jdbcType="VARCHAR"/>
<!-- ... -->
<sql id="Base_Column_List">id,url,thumbnailUrl,name,introduction,category,tags,picSize,picWidth,picHeight,picScale,picFormat,userId,createTime,editTime,updateTime,isDelete
</sql>

3)数据模型新增缩略图字段,包括 Picture 类、PictureVO 类、UploadPictureResult类:

/*** 缩略图 url*/
private String thumbnailUrl;

4)缩略图处理

首先明确我们使用的缩放规则,设置最大宽高后,对图片进行等比缩小。且如果缩略图的宽高大于原图,则不会处理。

修改 CosManage 的上传图片方法,补充对缩略图的处理:

  //图片缩放PicOperations.Rule thumbnailRule = new PicOperations.Rule();thumbnailRule.setBucket(cosClientConfig.getBucket());String thumbnailKey = FileUtil.mainName(key) + "_thumbnail." + FileUtil.getSuffix(key);thumbnailRule.setFileId(thumbnailKey);thumbnailRule.setRule(String.format("imageMogr2/thumbnail/!%sx%sr", 256, 256));rules.add(thumbnailRule);

修改PictureUploadTemplate 的上传图片方法,获取到缩略图:

   //设置缩略图uploadPictureResult.setThumbnailUrl(cosClientConfig.getHost() + "/" + thumbnailCiObject.getKey());

5)测试

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/85791.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GO语言---数组

文章目录 数组的基本特性数组的声明和初始化数组元素的访问和操作数组遍历多维数组数组的长度和容量数组作为函数参数数组与切片的区别注意 数组是Go语言中最基本的数据结构之一&#xff0c;它是一组相同类型元素的固定长度序列。 数组的基本特性 1、固定长度&#xff1a;数组…

7.5.3_1处理冲突的方法-拉链法

知识总览&#xff1a; 拉链法&#xff1a; 开始散列表中没有存储任何数据元素即散列地址上的元素是空的&#xff0c;散列地址可以视为链表的头指针&#xff0c;即没有插入任何元素前链表的头指针是空的。一个散列地址对应一个链表&#xff0c;散列地址上实际没有存数据元素&am…

鸿蒙运动项目开发:项目运行环境切换器

##鸿蒙核心技术##运动开发# 在开发鸿蒙运动项目时&#xff0c;管理不同运行环境&#xff08;如开发环境、测试环境、生产环境&#xff09;是一个常见的需求。通过合理地切换运行环境&#xff0c;开发者可以方便地进行调试、测试和部署。本文将介绍如何实现一个项目运行环境切换…

Linux内核中安全创建套接字:为何inet_create未导出及正确替代方案

引言 在Linux内核开发中,当驱动程序需要创建网络套接字时,开发者常会遇到一个关键问题:核心函数inet_create(负责初始化IPv4套接字)并未导出到内核符号表。本文深入剖析这一设计决策背后的逻辑,并提供驱动程序安全创建套接字的实践方案。 一、inet_create未导出的深层原…

63、不同路径II

题目 解答&#xff1a; 初始化和特殊情况比较麻烦的dp obstacleGrid(0,0)1的&#xff0c;直接return 0即可。入口都被堵住了还怎么走。 mn1情况&#xff0c;直接判断 第一行初始化&#xff1a;dp[1][0]->dp[i][0] 碰到有障碍物的&#xff0c;从当前格子开始到末尾全部置…

wx小程序登录设置角色

背景。pc端登录后在访问业务链接时可以根据固定获取用户的方法LoginUser user LoginHelper.getLoginUser(); 获取到用户信息。但wx端登录后无法获取。原因处在登陆时对用户信息的设置方面pc端和小程序端登录没有使用相同的登录方法。排除得知wx端小程序登录时没有设置角色。所…

MySQL5.7 慢查询SQL语句集合

文章目录 1. 按平均执行时间排序的慢查询2. 按总执行时长排序的慢查询3. MySQL 5.7 慢查询配置检查4. 扫描行数分析&#xff08;找出全表扫描&#xff09;5. 高频执行的慢查询6. 当前正在执行的查询7. 慢查询统计汇总8. 表结构和索引分析8.1 表索引详情查询8.2 表大小统计 1. 按…

MySQL学习(1)——基础库操作

欢迎来到博主的专栏:MySQL学习 博主ID:代码小豪 文章目录 数据库原理基础库操作增删数据库数据库编码与校验规则验证不同的校验规则对于库中数据的影响 备份与恢复数据库 数据库原理 mysql版本:mysql8.0 操作系统:ubuntu22.4 为了减少由于环境配置以及权限限制带来的使用问题&…

C++法则12:右值引用的核心目的:支持移动语义(Move Semantics)

C法则12&#xff1a;右值引用的核心目的&#xff1a;支持移动语义&#xff08;Move Semantics&#xff09; 右值引用&#xff08;Rvalue Reference&#xff09;是C11引入的最重要特性之一&#xff0c;其主要设计目的就是支持移动语义&#xff08;Move Semantics&#xff09;。 …

【LLM学习笔记4】使用LangChain开发应用程序(上)

目录 前言一、模型、提示和解析器&#xff08;model、prompt、parsers&#xff09;二、储存三、模型链四、基于文档的问答1.使用向量存储查询2. 结合表征模型和向量存储使用检索问答链回答问题 前言 在前面两部分&#xff0c;我们分别学习了大语言模型的基础使用准则&#xff…

Negative Contrastive Estimation Negative Sampling

1. 基本概念与问题背景 1.1 大规模分类问题 在自然语言处理中&#xff0c;给定上下文 c c c预测单词 w w w的条件概率为&#xff1a; P ( w ∣ c ) exp ⁡ ( s θ ( w , c ) ) ∑ w ′ ∈ V exp ⁡ ( s θ ( w ′ , c ) ) P(w|c) \frac{\exp(s_\theta(w,c))}{\sum_{w\in V…

Flink SQL Connector Kafka 核心参数全解析与实战指南

Flink SQL Connector Kafka 是连接Flink SQL与Kafka的核心组件&#xff0c;通过将Kafka主题抽象为表结构&#xff0c;允许用户使用标准SQL语句完成数据读写操作。本文基于Apache Flink官方文档&#xff08;2.0版本&#xff09;&#xff0c;系统梳理从表定义、参数配置到实战调优…

vscode内嵌浏览器实时预览vue项目

安装插件 web Preview 启动vue项目 打开预览 ctrl shift p 之后输入并选择 Open Web Preview 即可看到预览窗口&#xff0c;但此时明明我的页面是有内容的&#xff0c;但是窗口却空白的。 因为默认访问端口是3000&#xff0c;我们将其修改为vue项目默认的5173端口即可。 点…

计算机网络:(四)物理层的基本概念,数据通信的基础知识,物理层下面的传输媒体

计算机网络&#xff1a;&#xff08;四&#xff09;物理层的基本概念&#xff0c;数据通信的基础知识&#xff0c;物理层下面的传输媒体 前言一、物理层的基本概念1. 什么是物理层2. 物理层的核心使命3. 物理层的四大特性 二、数据通信的基础知识1. 数据通信系统的基本模型1.1 …

Linux系统性能优化

目录 Linux系统性能优化 一、性能优化概述 二、性能监控工具 1. 基础工具 2. 高级工具 三、子系统优化策略 1. CPU优化 2. 内存优化 3. 磁盘I/O优化 4. 网络优化 四、资源限制优化 1. ulimit 2. cgroups&#xff08;控制组&#xff09; 五、安全与注意事项 六、…

【streamlit streamlit中 显示 mermaid 流程图有两种方式】

streamlit中显示mermaid 流程图有两种方式 mermaind示例 code """ flowchart LRmarkdown["This **is** _Markdown_"]newLines["Line1Line 2Line 3"]markdown --> newLinesmarkdown["This **is** _Markdown_"]newLines[&quo…

Rust调用 DeepSeek API

Rust 实现类似 DeepSeek 的搜索工具 使用 Rust 构建一个高效、高性能的搜索工具需要结合异步 I/O、索引结构和查询优化。以下是一个简化实现的框架: 核心组件设计 索引结构 use std::collections::{HashMap, HashSet}; use tantivy::schema::{Schema, TEXT, STORED}; use …

Unity3D仿星露谷物语开发69之动作声音

1、目标 Player动作时产生的声音&#xff0c;比如砍倒树木、砸石头。 2、修复NPC快速行进的bug&#xff08;与本节无关&#xff09; 修改NPCMovement.cs脚本的MoveToGridPositionRoutine方法。 确保npcCalculatedSpeed的速度不少于最慢速度。 原代码&#xff1a; 修改后的…

【Node.js 的底层实现机制】从事件驱动到异步 I/O

简介 Node.js 作为 JavaScript 后端运行环境&#xff0c;其核心优势在于高并发处理能力和非阻塞 I/O 模型。 特点&#xff1a; 高并发处理&#xff1a;单线程事件循环高效处理大量并发连接I/O 密集型任务&#xff1a;非阻塞 I/O 模型避免线程切换开销&#xff0c;不适合 CPU…

nginx服务器配置时遇到的一些问题

京东云 CentOS 8.2 64位 Nginx配置文件修改后需要重启或重载服务的原因以及不重启的后果&#xff1a; ​​工作进程不主动重读配置​​&#xff1a; Nginx采用master-worker多进程架构。master进程读取配置文件并管理worker进程&#xff0c;worker进程处理实际请求。修改配置…