【前端】js实现图片自适应

article/2025/10/30 5:45:09

前言:

        前几天写第一版代码的时候,测试跟我说,你这用户上传图片显示有问题啊,图像不是被拉宽就是被拉长了,不行啊。因为我给el-image设计的是固定长宽,如果图片不是这个比例,那直接就会变形了,如图

秒变鬼片有没有

        后来我给图片固定了宽,长度为auto,这样一部分图片是没问题了,但是本来没有那么宽的图片又被强行拉宽了,也不行!

        我还不信了,最终用一个js方法实现了图片的自适应,无论什么格式的图片,显示其比例都不会出错。

 

目录

前言:

一、问题分析

二、算法

三、具体实现

 四、其他问题

(1)如何获取图片长宽?

(2)如何利用js改变样式


一、问题分析

        既然要实现图片自适应,那就要对不同的图片尺寸进行分类处理,我最开始是分了5类

 对于长宽都不超过的情况 -- 应该不改变图片本身比例

对于长宽都超过的情况 -- 应该是根据图片比例进行缩小,这样才不会扭曲图片,因此同样存在两种情况

二、算法

// img.height -- 图片高度 img.weight -- 图片宽度
// changeHeight -- 压缩后高度 changeWidth -- 压缩后宽度 
// 180 -- 显示器高度 360 -- 显示器宽度if (img.height > 180 && img.width > 360) {if (img.height / img.width > 0.5) {// 第四种情况} else {// 第五种情况}} else if (img.height > 180 && img.width <= 360) {// 第二种情况
} else if (img.height <= 180 && img.width > 360) {// 第三种情况
} else {// 第一种情况
}

将5种情况的判断条件进行分类讨论后,再讨论其具体实现方法

第一种:高度 = 图片高  宽 = 图片宽

第二种:高 = 显示器高  宽 = 图片宽(压缩后)

(或许有人会有疑问:既然图片宽度没超过,那为什么不直接使用图片宽呢? 因为图片高已经压缩为显示器高了,如果图片宽保持不变,图像绝对会变形,这就涉及到比例了,在进行图片处理的时候,一定不要改变其比例!)

第三种: 高 = 图片高(压缩后) 宽 = 显示器宽

对于四、五种情况,因为长宽都超了,因为再判断图片与显示器关系的同时,也要判断图片自身的关系,就是其比例

 这也就是前面写的这块代码了,后面其实就是显示器的比例,通过比例对比,就能知道这个图片相比显示器是偏宽还是偏长

然后我就发现,第四种 和 第三种处理方法是一致的 ,第五种 和 第二种一致,也就是无论另一条边超没超过显示器,都需要按比例缩放,因此代码可以整理如下

三、具体实现

if(img.height > 180 || img.width >360){if(img.height *2 >img.width){changeHeight.value = '180px'changeWidth.value = (img.width * 180) / img.heightchangeWidth.value = parseInt(changeWidth.value) + 'px'} else{changeHeight.value = (img.height * 360) / img.widthchangeHeight.value = parseInt(changeHeight.value) + 'px'changeWidth.value = '360px'}} else {changeHeight.value = img.height + 'px'changeWidth.value = img.width + 'px'}

实现中多了两个内容,单位除数取整

根据css文档可知,需要有单位样式才会起作用

 等比例缩放的时候必然会出现一条边的数值为小数,虽然height 和 weight 可以取小数,但是不同浏览器可能会对其有不同解析,为了避免可能出现的问题,提前将其取整。

 四、其他问题

(1)如何获取图片长宽?

var img = new Image()
img.src = res.resourceUrl
img.onload = function () {
}

详情如下:

JS快速获取图片宽高的方法_Jensen Wu UED-CSDN博客_js获取图片的宽高

(2)如何利用js改变样式

<el-image :style="{ height: changeHeight, width: changeWidth }" ></el-image>


http://chatgpt.dhexx.cn/article/vb8BL04d.shtml

相关文章

谈一下图片的自适应

在工作中经常遇到要求图片自适应的需求&#xff0c;下面就谈一下我在工作中经常使用的一些方法 单独使用img标签的情况 单独使用img的时候&#xff0c;可以只设置width就可以了&#xff0c;height不用设置&#xff0c;因为img不设置height&#xff0c;它会自动根据图片的比例…

浅谈图片宽度自适应解决方案

在网页设计中&#xff0c;随着响应式设计的到来&#xff0c;各种响应式设计方案层出不穷。对于图片响应式的问题也有很多前端开发人员在进行研究。比较好的图片响应式设想便是在不同的屏幕分辨率下使用不同实际尺寸的图片&#xff0c;而达到在高速网络环境中使用大或超大高清图…

浅谈图片展示、图片自适应解决方案

文章目录 导读CSS 解决方案background-size&#x1f437;background-size: contain&#xff1b;&#x1f437;background-size&#xff1a;100%&#xff1b;&#x1f437;background-size:cover; object-fit&#x1f437;object-fit: contain&#xff1b;&#x1f437;object-f…

实时即未来,大数据项目车联网之项目基石与前瞻【一】

文章目录 写在前面车联网项目全新升级 车联网行业背景介绍车联网技术汽车行业新能源汽车 车联网行业技术车辆网行业产业链与国内知名企业 车联网项目车联网技术架构和技术选型车联网项目的架构搭建 写在前面 车联网项目全新升级 更全 8-》21篇 更细 -》 图文并茂、部分代码首…

开发一个大数据项目的架构与流程

如果我们想做一个数据分析项目&#xff0c;我们就应该清楚数据的处理流程。 我们大致可以分为: 数据采集——数据存储——数据清洗——数据分析——数据可视化和数据挖掘、二次分析 在以上流程处理完成之后&#xff0c;会进入调度阶段&#xff1a;将数据采集、清洗、分析、导出…

大数据项目大致流程

1、提出需求-需要和多个部门负责人进行协商&#xff1a;关于项目的可行性分析 2、需求分析-进行需求调研&#xff08;研究竞品&#xff09;、市场调研&#xff0c;如果是给甲方做产品&#xff0c;需要和甲方协商需求细则 3、技术选型-需要多个开发部门的人员参与协商 考虑的…

大数据项目之电商数仓、数据仓库概念、项目需求及架构设计

文章目录 1.数据仓库概念2. 项目需求及架构设计2.1 项目需求分析2.1.1 采集平台2.1.2 离线需求2.1.3 实时需求2.1.4 思考题 2.2 项目框架2.2.1 技术选型2.2.2 系统数据流程设计2.2.3 框架版本选型2.2.3.1 Apache框架版本 2.2.4 服务器选型2.2.4.1 物理机&#xff1a;2.2.4.2 云…

大数据项目开发进度(实时更新)

文章目录 前言项目概述项目进度第一周0525-0529&#xff1a;第二周0601-0605&#xff1a;第三周0608-0612&#xff1a;第四周0615-0621&#xff1a;&#xff08;周末加班&#xff09;第五周0622-0628&#xff1a;&#xff08;周末加班&#xff09;第六周0629-0705&#xff1a;&…

大数据项目需求分析

以大数据项目为主线&#xff0c;技术理论与项目实践相结合&#xff0c;按照大数据项目的开发流程逐步推进&#xff0c;本文主要讲解项目的需求分析、架构设计以及离线和实时数据流程设计&#xff0c;然后提前规划好大数据项目需要的集群&#xff0c;按照项目的实现逻辑&#xf…

大数据项目篇--项目架构图

文章目录 离线架构离线架构-表信息离线架构-ETL信息 实时架构 离线架构 离线架构-表信息 离线架构-ETL信息 实时架构

客快物流大数据项目学习框架

文章目录 客快物流大数据项目学习框架 前言 一、项目简介 二、功能介绍 三、项目背景 四、服务器资源规划 五、技术亮点及价值 六、智慧物流大数据平台 客快物流大数据项目学习框架 前言 利用框架的力量&#xff0c;看懂游戏规则&#xff0c;才是入行的前提 大多数人…

大数据项目流程

一、项目流程 1&#xff09;需求概况&#xff1a;实现目标是什么&#xff1f; ——— 通过大数据获取什么信息 2&#xff09;需求分析&#xff1a;用什么样的数据&#xff0c;实现什么样的效果。 数据源的考量&#xff08;数据的种类和量的大小&#xff09;&#xff0c;数据…

农业大数据项目

小白学苑开始承接大数据定制项目和大数据实训项目啦&#xff01;欢迎联系合作&#xff01; 下面是近期客户定制的农业大数据项目结果展示&#xff1a; 一、项目需求&#xff1a; 搭建一个基于Hadoop大数据分析框架的农业大数据系统&#xff0c;该系统框架以我国农业的水果产业…

常见的大数据项目

大数据项目最重要的两个特点是数据量大&#xff0c;实时性要求强&#xff0c;这也是与小数据和传统数据处理方式的最重要的区别。 大数据领域的主打项目&#xff0c;如下所示&#xff1a; 大数据领域的项目&#xff0c;主要分成以下几个部分 数据的整合&#xff0c;也就是数据…

【大数据】9大实战项目解决你所有烦恼(写论文、找工作)

你还在为“网上资料多而杂&#xff0c;不系统&#xff0c;不连贯&#xff0c;非常浪费时间”而烦恼么&#xff1f; 你还在为“学习碰到问题无人辅导&#xff0c;问题积累长期不解决&#xff0c;打击学习信心”而烦恼么&#xff1f; 你还在为“没有项目经验&#xff0c;投简历…

win10安装ubuntu虚拟机

第一步&#xff1a;下载virtualbox和ubuntu镜像文件 1、virtualbox下载地址&#xff1a; https://www.virtualbox.org/wiki/Downloads 选择Windows hosts 文件不大&#xff0c;103MB&#xff0c;可以直接在网页上下载 2、ubuntu iso下载地址&#xff1a; http://releases.u…

在VMware实验Ubuntu虚拟机的使用

目录 下载Ubuntu18.04 安装Ubuntu虚拟机 先安装一个Ubuntu再说 然后再来调试 开始使用&#xff01; 调整页面 正式测试开始&#xff01; 结果验证 时隔多日。。。。 改进 今天我们来尝试在VMware中弄一个Ubuntu虚拟机来使用 下载Ubuntu18.04 首先&#xff0c;我们要…

本机与Ubuntu虚拟机共享文件

1、找到你的虚拟机并右击&#xff0c;弹出的选项卡选择设置 2、点击选项》共享文件夹》单选总是启用》点击添加你的文件路径》点击确定 3、然后进入到虚拟机桌面点击文件选择其他地方选择计算机 4、然后再依次进入红框里的路径就可以访问本机的共享的文件了。 完&#xff01; 路…

Ubuntu虚拟机镜像下载及创建

一、下载ubuntu镜像 1.下载ubuntu镜像 ubuntu下载网址&#xff1a; https://mirrors.neusoft.edu.cn/ubuntu-releases/20.04.5/ 或者https://mirrors.aliyun.com/ubuntu-releases/20.04.5/ 然后选择如下&#xff1a; 二、安装ubuntu虚拟机 1.安装ubuntu虚拟机 打开VMware…