如何自动裁剪和中心的图像
给定任意图像,我想从图像的中心裁剪一个正方形,并将其显示在给定的正方形内。
这个问题类似于这样: CSS显示一个图像resize和裁剪 ,但我不知道图像的大小,所以我不能使用设置边距。
一种解决scheme是使用大小为裁剪尺寸的元素中的背景图像。
基本的例子
.center-cropped { width: 100px; height: 100px; background-position: center center; background-repeat: no-repeat; }
<div class="center-cropped" style="background-image: url('http://placehold.it/200x200');"> </div>
我正在寻找一个纯粹的CSS解决scheme使用img
标签(而不是背景图像的方式)。
我发现这个很棒的方式来实现http://jonathannicol.com/blog/2014/06/16/centre-crop-thumbnails-with-css/的目标:;
.thumbnail { position: relative; width: 200px; height: 200px; overflow: hidden; } .thumbnail img { position: absolute; left: 50%; top: 50%; height: 100%; width: auto; -webkit-transform: translate(-50%,-50%); -ms-transform: translate(-50%,-50%); transform: translate(-50%,-50%); } .thumbnail img.portrait { width: 100%; height: auto; }
这与@Nathan Redblur的答案类似,但它也允许肖像图像。
对我来说就像一个魅力。 你需要知道的唯一的图像是否是肖像或风景为了设置.portrait
类,所以我不得不使用一点的JavaScript的这部分。
带有img
标签但没有background-image
示例
这个解决scheme保留了img
标签,这样我们不会失去拖动或右键单击来保存图像的能力,但是没有background-image
只是居中和用css裁剪。
除非是非常高的图像,否则保持宽高比。 (检查链接)
(在行动中看法)
标记
<div class="center-cropped"> <img src="http://placehold.it/200x150" alt="" /> </div>
CSS
div.center-cropped { width: 100px; height: 100px; overflow:hidden; } div.center-cropped img { height: 100%; min-width: 100%; left: 50%; position: relative; transform: translateX(-50%); }
试试这个:设置你的图像裁剪尺寸,并在你的CSS中使用这一行:
object-fit: cover;
我使用@ Russ's和@ Alex的答案创build了一个angularjs指令
2014年及以后可能会有趣:P
HTML
<div ng-app="croppy"> <cropped-image src="http://placehold.it/200x200" width="100" height="100"></cropped-image> </div>
JS
angular.module('croppy', []) .directive('croppedImage', function () { return { restrict: "E", replace: true, template: "<div class='center-cropped'></div>", link: function(scope, element, attrs) { var width = attrs.width; var height = attrs.height; element.css('width', width + "px"); element.css('height', height + "px"); element.css('backgroundPosition', 'center center'); element.css('backgroundRepeat', 'no-repeat'); element.css('backgroundImage', "url('" + attrs.src + "')"); } } });
小提琴链接
尝试这个:
#yourElementId { background: url(yourImageLocation.jpg) no-repeat center center; width: 100px; height: 100px; }
请记住,如果您的DOM元素具有布局(块显示的元素,如div
或img
), width
和height
将仅适用。 如果不是(例如跨度),则添加display: block;
到CSS规则。 如果您无法访问CSS文件,请将样式内联放置在元素中。
还有另一种方法可以裁剪图像为中心:
.thumbnail{position: relative; overflow: hidden; width: 320px; height: 640px;} .thumbnail img{ position: absolute; top: -999px; bottom: -999px; left: -999px; right: -999px; width: auto !important; height: 100% !important; margin: auto; } .thumbnail img.vertical{width: 100% !important; height: auto !important;}
唯一需要的是将垂直图像添加到垂直图像,您可以使用下面的代码:
jQuery(function($) { $('img').one('load', function () { var $img = $(this); var tempImage1 = new Image(); tempImage1.src = $img.attr('src'); tempImage1.onload = function() { var ratio = tempImage1.width / tempImage1.height; if(!isNaN(ratio) && ratio < 1) $img.addClass('vertical'); } }).each(function () { if (this.complete) $(this).load(); }); });
注意:“!important”用于覆盖img标签上可能的宽度,高度属性。