同时使用css显示图像裁剪图像的顶部和底部

Posted

技术标签:

【中文标题】同时使用css显示图像裁剪图像的顶部和底部【英文标题】:while display image crop Top and Bottom of image using css 【发布时间】:2016-07-18 23:46:10 【问题描述】:

我正在尝试为显示内容大小的视频显示来自 youtube 的图像

height:180px
width :270px

来自 youtube 的图片顶部和底部都有一些黑色斑点

例如:

我喜欢显示这样的图像

在网上找答案

发现这些链接很有帮助,但没有解决我想如何显示图像的方法

How to automatically crop and center an image

这个最有帮助,但我不能使用背景图像标签。我想要它在标签中

CSS Display an Image Resized and Cropped

谁能帮我解决这个问题..谢谢

【问题讨论】:

使用Handbrake 编辑视频,它可以轻松裁剪。然后拍摄快照。 @zer00ne 实际上我并没有将图像存储到数据库中,每次使用 i.ytimg.com/vi/WTq-PDsS318/hqdefault.jpg 从 youtube 获取图像 -> 这个链接 【参考方案1】:

我不知道这是否是你要找的,但它看起来有点像你不想做的事情?

第一个 img 的高度为 220 像素,宽度为 270,然后我将 img 放在 z-index 1 的 div 后面,然后我给了 div 一个溢出隐藏和高度 180px 之后我必须给 img 一个margon top -20px 放在中间

这就是我的想法,希望对你有帮助

.box
  height:180px;
  overflow:hidden;
  z-index:2;
  

.test
  z-index:1;
  margin-top: -20px;
<div>
<img src="https://unsplash.it/270/220?image=871"  class="">
</div>

<hr/>

<div class="box">
<img src="https://unsplash.it/270/220?image=871"  class="test">
</div>

.box
  height:148px;
  overflow:hidden;
  z-index:2;
  

.test
  z-index:1;
  margin-top: -57px;
  width :350px

.box1
  height:125px;
  overflow:hidden;
  z-index:2;
  

.test2
  z-index:1;
  margin-top: -50px;
  width :300px
<div>
<img src="https://i.ytimg.com/vi/WTq-PDsS318/hqdefault.jpg"  class="te">
</div>

<div class="box">
<img src="https://i.ytimg.com/vi/WTq-PDsS318/hqdefault.jpg"  class="test">
</div>
<div class="box1">
<img src="https://i.ytimg.com/vi/WTq-PDsS318/hqdefault.jpg"  class="test2">
</div>

如果你的宽度总是固定的,你给图像的宽度,然后你找到正确的高度,然后你就有了你的“容器,如果它们总是具有相同的固定宽度,你可以在其中放置所有想要的图像

【讨论】:

@Pranavadurai 在这种情况下,您始终必须知道图像的高度和黑色空间 这个解决方案很好,但是如果我给我的宽度它剪切图像,我有固定的宽度,有什么解决方案吗?【参考方案2】:

更新

我已经更新了答案,但我不确定你想要什么,你只是说了你不想要的。所以我假设你想要:

保持纵横比

避免裁剪

没有黑条,只有图像边到边

我们知道这是一张宽高比为 16:9 的宽屏海报,所以如果您想要 270 像素的宽度,请执行以下操作:

宽度除以 16

270/16 = 16.875

将这个商乘以 9

16.875 * 9 = 151.875

向上或向下舍入

Round up to 152px

用结果改变高度然后应用object-fit:cover

152px is the height of an image that's 270px wide and has an aspect ratio of 16:9.

请查看Fiddle 并更新片段


编辑

为了反映更新和更好地理解 OP 的目标,编辑了此代码段。

object-fit 是一个简单的 CSS 属性。请参阅此 article 下面的代码段已注释。顺便说一句,您需要从此片段中获取的唯一代码是 object-fit: cover,其余样式和标记仅用于演示。

片段

/* We know this is a widescreen poster with the aspect ratio of 16:9, so if you want a width of 270px, do the following:

    270/16 = 16.875
    16.875 * 9 = 151.875
    Round up to 152px
    
152px is the height of an image that's 270px wide and has an aspect ratio of 16:9 */
.bg1 
  width: 270px;
  height: 152px;
  object-fit: cover;
  outline: 2px dashed blue;

.bg2 
  width: 270px;
  height: 152px;
  object-fit: contain;
  outline: 2px dashed blue;

.bg3 
  width: 270px;
  height: 152px;
  outline: 2px dashed blue;

aside 
  height: 100%;
  width: 40%;
  display: inline-block;
  position: absolute;
  right: 0;
  top: 0;

figure 
  height: 180px;
  width: 270px;
  max-width: 50%;

.pointer 
  position: absolute;

.pointer b 
  font-size: 32px;

#a.pointer 
  top: 43%;
  left: 52%;

#b.pointer 
  bottom: 5%;
  left: 52%;

.box 
  width: 600px;
  height: 450px;
  position: relative;

.spacer 
  position: relative;
  padding: .1% 0;
  width: 2px;

code 
  font-family: Consolas;
  color: red;
<section class="box">
  <figure>
    <figcaption>object-fit: cover</figcaption>
    <img class="bg1" src="http://img.youtube.com/vi/MzMqjG9om18/hqdefault.jpg" />
  </figure>
  <!--<div class="pointer" id="a"><b>⬅</b>
    <br/>Space</div>-->
  <figure>
    <figcaption>object-fit: contain</figcaption>
    <img class="bg2" src="http://img.youtube.com/vi/MzMqjG9om18/hqdefault.jpg" />
  </figure>


  <figure>
    <figcaption>Without anything but the height property</figcaption>
    <img class="bg3" src="http://img.youtube.com/vi/MzMqjG9om18/hqdefault.jpg" />
  </figure>

  <aside>
    <p><code>object-fit: cover</code> will stretch an image to the edges of it's container (parent element) while keeping aspect ratio and cropping.</p>
    <p>But when given the correct dimensions, <code>object-fit: cover</code> will result in a perfect fit edge to edge. No cropping either.</p>
    <div class="spacer">&nbsp;</div>
    <p><code>object-fit: contain</code> will stretch an image to the edges of it's container while keeping aspect ratio but will not crop at the edges, so as you can see, this image has space left and right. At wider dimentions, the space will manifest below and above.</p>
  
    <div class="spacer">&nbsp;</div>
    <p>This is the image when set to it's aspect ratio at 270 x 152px and as you can see, without <code>object-fit:cover</code>, math alone will not resolve the problem.</p>
  </aside>
  <!--<div class="pointer" id="b"><b>⬅</b>
    <br/>Space</div>-->
</section>

【讨论】:

这段代码没有显示我想要的你可以在这里查看jsfiddle.net/pranavadurai/Lagy33pg【参考方案3】:

您可以只剪辑图像。有关剪辑的更多信息,您可以访问此处:http://www.w3schools.com/cs-s-ref/pr_pos_clip.asp

例子:

img 
    position: absolute;
    clip: rect(0px,60px,200px,0px);

【讨论】:

以上是关于同时使用css显示图像裁剪图像的顶部和底部的主要内容,如果未能解决你的问题,请参考以下文章

PHP图像从顶部,底部,左侧和右侧裁剪

如何从顶部和底部裁剪位图图像?

裁剪带有顶部和底部边距的图像

如何在颤动中显示具有顶部和底部渐变阴影的图像?

ImageView显示图像顶部和底部的空白区域

从上到下均匀裁剪图像