JS实现等比例缩放图片
JS实现等比例缩放图片
有时候我们前端页面只有500×500像素的宽和高的布局,但是后台返回的数据图片是1000×1000,那么这种情况下 如果我直接返回的话 那么图片肯定有一部分没有显示出来,在这种情况下我是想能不能在我们前端开发实现图片等比例缩放。比如如下HTML代码:
<div id="demo1"> <img src="http://img01.taobaocdn.com/imgextra/i1/397746073/T2BDE8Xb0bXXXXXXXX-397746073.jpg" alt="">
</div>
CSS代码如下:
#demo1{width:800px;height:300px;overflow:hidden;}
外层div的css样式定了宽度是800像素 高度是300像素,但是这张图片的宽度和高度分别是1060像素和300像素,如果我们不做任何处理的话,那么图片肯定会有260像素被隐藏掉了,而我们现在想要图片被渲染出来后 根据外层容器800像素×300像素的宽度和高度分别等比例缩放,这样的话 不管图片的宽度和高度是多少,都可以自适应!
下面我们可以先看看JSFIddle效果是什么样的!第一张图片是没有任何处理的,第2张小的是根据宽度800像素进行等比例缩放后的。
想要看效果,请轻轻点击我!
已知图片的宽度和高度的等比例缩放的原理是:
HTML代码如下:
<img src="http://img01.taobaocdn.com/imgextra/i1/397746073/T2BDE8Xb0bXXXXXXXX-397746073.jpg" width="1060" height="300" alt="">
<div id="demo1"> <img src="http://img01.taobaocdn.com/imgextra/i1/397746073/T2BDE8Xb0bXXXXXXXX-397746073.jpg" alt="">
</div>
CSS代码如下:
#demo1{width:800px;height:300px;overflow:hidden;}
JS代码如下:
/*** 已知图片的宽度和高度的等比例缩放*/function knowImgSize(id) {var idWidth = $(id).width(), // 容器的宽度和高度idHeight = $(id).height();$(id + ' img').each(function(index,img){var img_w = $(this).width(),img_h = $(this).height();// 如果图片自身宽度大于容器的宽度的话 那么高度等比例缩放if(img_w > idWidth) {var height = img_h * idWidth / img_w;$(this).css({"width":idWidth, "height":height});}});}// 初始化$(function(){knowImgSize("#demo1");});
2.JS实现未知图片大小的等比例缩放
当页面加载的图片尺寸未知的情况下,上述代码则不能进行有效的缩放.那么我们现在有没有办法也可以实现类似的?
JSFiddle demo链接如下:
想要查看效果,先轻轻的点击我下!
下面是HTML代码如下:
<h2>缩放后的</h2>
<div class="parentCls"><p><img src="http://img01.taobaocdn.com/imgextra/i1/397746073/T2BDE8Xb0bXXXXXXXX-397746073.jpg" class="autoImg"/></p><p><img src="http://gtms01.alicdn.com/tps/i1/T11LpGFs8jXXb5rXb6-1060-300.jpg" class="autoImg"></p><p><img src="http://img04.taobaocdn.com/imgextra/i4/397746073/T2fjl5XA8aXXXXXXXX-397746073.jpg" class="autoImg"/></p><p><img src="http://img03.taobaocdn.com/tps/i3/T1CXpTFkpcXXb5rXb6-1060-300.jpg" class="autoImg"/></p><p><img src="http://gtms01.alicdn.com/tps/i1/T1hC0HFwxaXXb5rXb6-1060-300.jpg" class="autoImg"/></p><p><img src="http://img01.taobaocdn.com/imgextra/i1/397746073/T2BDE8Xb0bXXXXXXXX-397746073.jpg" class="autoImg"/></p><p><img src="http://gtms01.alicdn.com/tps/i1/T1hC0HFwxaXXb5rXb6-1060-300.jpg" class="autoImg"/></p>
</div>
简单的Css代码如下:
<style>
/*demo style*/
body { font:12px 'Microsoft Yahei', Tahoma, Arial; _font-family:Tahoma, Arial; }
a { color:#0259C4; }
a:hover { color:#900; }
.demoInfo { padding:10px; background:#F7F7F7; border:1px solid #EEE; -webkit-border-radius:5px; -moz-border-radius:5px; border-radius:5px; }
.tips { color:#CCC; }
.parentCls { width:680px; padding:10px; margin-top:50px; overflow:hidden; border:1px solid #CCC; }
.parentCls p { padding: 0 8px; }
.parentCls img { border:0 none; }
</style>
所有的JS代码如下:
/*** JS实现未知图片大小的等比例缩放*/function AutoImg(options) {this.config = {autoImg : '.autoImg', // 未知图片dom节点parentCls : '.parentCls' // 父节点};this.cache = {};this.init(options);}AutoImg.prototype = {init: function(options){this.config = $.extend(this.config, options || {});var self = this,_config = self.config;$(_config.autoImg).each(function(index,img){var src = img.src,parentNode = $(img).closest(_config.parentCls),parentWidth = $(parentNode).width();// 先隐藏原图img.style.display = 'none';img.removeAttribute('src');// 获取图片头尺寸数据后立即调整图片imgReady(src, function (width,height) {// 等比例缩小if (width > parentWidth) {height = parentWidth / width * height,width = parentWidth;img.style.width = width + 'px';img.style.height = height + 'px';};// 显示原图img.style.display = '';img.setAttribute('src', src);});});}};var imgReady = (function(){var list = [],intervalId = null;// 用来执行队列var queue = function(){for(var i = 0; i < list.length; i++){list[i].end ? list.splice(i--,1) : list[i]();}!list.length && stop();};// 停止所有定时器队列var stop = function(){clearInterval(intervalId);intervalId = null;}return function(url, ready, error) {var onready = {}, width, height, newWidth, newHeight,img = new Image();img.src = url;// 如果图片被缓存,则直接返回缓存数据if(img.complete) {ready(img.width, img.height);return;}width = img.width;height = img.height;// 加载错误后的事件 img.onerror = function () {error && error.call(img);onready.end = true;img = img.onload = img.onerror = null;};// 图片尺寸就绪var onready = function() {newWidth = img.width;newHeight = img.height;if (newWidth !== width || newHeight !== height ||// 如果图片已经在其他地方加载可使用面积检测newWidth * newHeight > 1024) {ready(img.width, img.height);onready.end = true;};};onready();// 完全加载完毕的事件img.onload = function () {// onload在定时器时间差范围内可能比onready快// 这里进行检查并保证onready优先执行!onready.end && onready();// IE gif动画会循环执行onload,置空onload即可img = img.onload = img.onerror = null;};// 加入队列中定期执行if (!onready.end) {list.push(onready);// 无论何时只允许出现一个定时器,减少浏览器性能损耗if (intervalId === null) {intervalId = setInterval(queue, 40);};};}
})();
JS实现等比例缩放图片相关推荐
- html 图片比例 js,js自动等比例设置图片尺寸大小
css 图片等比例缩放 首页产品展示的图片都变形了,客户要求图片等比例大小,和产品展示的效果一样: css控制图. 网站的内容页面,经常要放图片,如果图片太大会撑出,影响页面美观. > HTML ...
- python 等比例缩放图片 自写
Python等比例缩放图片 使用了 OpenCV 进行图片的读取 输入:利用 cv2.imread 函数读取的 Mat 矩阵 输出:缩放后的 Mat 矩阵(示例代码为缩放到 512x512 大小,也可 ...
- python调整屏幕缩放比例_python实现批量按比例缩放图片效果
本文实例为大家分享了python实现批量按比例缩放图片的具体代码,供大家参考,具体内容如下 把脚本文件放在要缩放的文件夹下面. 双击运行脚本,输入要缩放的系数.脚本会在当前目录下创建一个scaledI ...
- [原创] 图片操作的类(ImageLibrary)-按比例缩放图片
[原创] 图片操作的类(ImageLibrary)-按比例缩放图片 http://www.vjsdn.com/bbs/bbsTopicDetails.aspx?pid=241 转载于:https:// ...
- java实现按比例缩放图片技巧
java实现按比例缩放图片技巧 案例需求: 根据指定的文件名称,用户给定的缩放比例来完成缩放图片 思路分析: 1.文件对象File 2.BufferedImage构造器: 图像数据的访问的缓冲器 3. ...
- Java 等比例缩放图片
/*** 等比率缩放* @param imgsrc 原图片路径* @param imgdist 缩放图片路径* @param widthdist 指定缩放宽度*/ public static void ...
- 等比例缩放图片并填充图片为正方形(python附代码)
等比例缩放图片并填充图片为正方形 看实现的效果 代码 看实现的效果 之前的 836x662 之后的 300x300 且图片中的塔克斯居中 代码 import os import cv2 import ...
- python 等比例缩放图片
在对图片缩放时,可能会使得图片产生变形,以下代码按照比例缩放图片,保持长宽比. 例如原图为: 如果resize成(224,224)则图片变为 import cv2def process_image(i ...
- Python Opencv等比例缩放图片
Python Opencv等比例缩放图片 前言 前提条件 相关介绍 实验环境 等比例缩放图片 代码实现 输出结果 前言 本文是个人使用Python Opencv处理图片的笔记,由于水平有限,难免出现错 ...
最新文章
- Ember.js 入门指南——查询记录
- 阿里京东带头打劫,下一个被干掉的就是你
- js对象数组中的某属性值 拼接成字符串
- 大厂在用的Python反爬虫手段,破了它!
- MySQL中通配类型各自作用_在Access数据库中。在查找操作中,通配符*、?与#各有什么作用?...
- Android studio吧,Android Studio 连接真机
- lua 函数回调技巧
- RDD partitioner入门详解
- BZOJ1101 [POI2007] Zap
- 2019 互联网月饼哪家强?阿里走情怀;百度最土豪;浪潮最高冷;抖音最.........
- PS制作(LOGO)步骤流程
- 2019腾讯广告大赛总结
- 自动驾驶-YOLOV5目标检测
- bmp图片格式转化为jpg
- precision,recall,sensitivity, specificity ,mAP等几种评价指标
- android当电脑麦克风,电脑没有麦克风?让手机充当电脑麦克风!
- 中关村GHOST WIN7 SP1旗舰版
- 详解C++学习方向和就业方向!
- 2022年通信工程专业保研:从四非到浙大工院夏令营面试经验分享(前期准备篇/含通信原理面试真题)
- 数据安全需要做什么?