前几天养花老板推荐了一波使用JS实现缩略图自动缩放和裁切的方法,特别分享。
该方法通过class识别需要处理的图片,通过_width和_height获取需要的长宽值,实现比例缩放。计算后通过JS添加overflow的外框实现裁切效果。
个人也比较推荐使用DIV外框实现伪裁切的这种方式,不需要存储各种各样的缩略图,在一般的CMS系统中通常保证2个版本的图片就足够使用。能够保证图片存储中的整洁性,便于备份、维护、升级和迁移。
另外,使用JS配合外框的一个好处是灵活——你也可以修改下面的代码,自行处理图片的裁切位置。甚至对于特殊的图片,还可以通过增加_left和_height的方式自由指定位置。有需要的朋友们也可以根据自己的需要修改。
JS主函数:
//图片自动缩放
function DrawImage(ImgObj){
var image = new Image();
image.src = ImgObj.attr('src');
ImgObj.attr('src', '/static/module/admin/img/onimg.png');
var maxWidth = ImgObj.attr('_width'),
maxHeight = ImgObj.attr('_height');
var iWidth = image.width,
iHeight = image.height;
var containerRatio = maxWidth / maxHeight,
imgRatio = iWidth / iHeight;
if (imgRatio > containerRatio) {
iWidth = maxWidth;
iHeight = maxWidth / imgRatio;
if(iHeight < maxHeight){
iHeight = maxHeight;
iWidth = maxHeight * imgRatio;
}
} else if (imgRatio < containerRatio) {
iHeight = maxHeight;
iWidth = maxHeight * imgRatio;
if(iWidth < maxWidth){
iWidth = maxWidth;
iHeight = maxWidth / imgRatio;
}
} else {
iWidth = maxWidth;
iHeight = maxHeight;
}
var len = ImgObj.parent().children().length,
parentWidth = ImgObj.parent().width(),
parentHeight = ImgObj.parent().height()
if((len == 1 && ImgObj.parent('td').length == 0) || (parentWidth == maxWidth && parentHeight == maxHeight)){
var parent = ImgObj.parent().css({'overflow':'hidden','width':maxWidth+'px','height':maxHeight+'px','display':'block'});
} else {
var parentDiv = '<div style="overflow: hidden; width: '+maxWidth+'px; height: '+maxHeight+'px; display: block;"></div>';
ImgObj.wrap(parentDiv);
}
ImgObj.attr('src', image.src);
var ml = -(iWidth-maxWidth)/2;
var mt = -(iHeight-maxHeight)/2;
ImgObj.css({"width":iWidth, "height":iHeight, 'marginLeft':ml+'px', 'marginTop':mt+'px'});
}
JS初始化(需要Jquery支持):
$('.resize').each(function(){
DrawImage($(this));
});
HTML图片代码示例:
img src="/abc.jpg" class="resize" _width="380px" _height="640px"
源码提供者:养花老板