【问题标题】:Resizing and cropping an image in HTML5 and css在 HTML5 和 css 中调整和裁剪图像
【发布时间】:2016-05-12 20:55:09
【问题描述】:

我的要求 -

  1. 在 div/canvas 中显示随机图像
  2. 图像高度应调整为父高度
  3. 图像宽度应按比例调整大小(与高度)
  4. 如果图像宽度大于父宽度,则从左右均匀裁剪

我已经用 java 脚本实现了这一点。 Jsfiddle 位于http://jsfiddle.net/yesprasoon/N3WvF/。您可以调整输出窗口的大小以查看它是如何工作的。

但是我觉得我这样做很乏味,而且在 CSS 和/或 jQuery 中有一些非常简单的东西。你能帮我处理纯 CSS(最好)吗?

我也在这里附上 java 脚本 -

var strDataURI;
//
displayBackground(true);
//
window.onresize = function(event) {
 displayBackground(false);
}
//
function displayBackground(bChangeImage)
{
 //alert("displayBackground");
 var appWidth = window.innerWidth;
 var appHeight = window.innerHeight;
 //
 if (bChangeImage)
 {
   var suffix_array = ["_california","_easter","_eiffel","_hk","_taj"];
   var ran = Math.floor((Math.random()*5)+1);
   ran = ran - 1;
   //ran = 3;
   strDataURI = "http://minds-eye.info/TP_Test/TP"+suffix_array[ran]+".jpg";
 }
 //
 var myCanvas = document.getElementById('canvas');
 var ctx = myCanvas.getContext('2d');
 var img = new Image;
 img.onload = function(){
  ctx.canvas.width  = appWidth;
  ctx.canvas.height = appHeight;
  //
  var hFraction = appHeight / img.naturalHeight;
  var displayWidth = img.naturalWidth*hFraction;
  mrgLeft = (appWidth - displayWidth)/2;
  mrgTop = (appHeight - img.naturalHeight)/2;
  ctx.drawImage(img,mrgLeft,0, displayWidth, appHeight);
  //blurMargin = 20;
  //stackBlurCanvasRGB( "canvas", blurMargin, blurMargin, appWidth-blurMargin*2, appHeight-blurMargin*2, 6 );
  };
 img.src = strDataURI;
 }

【问题讨论】:

    标签: html css responsive-design resize-crop


    【解决方案1】:

    这应该可以解决问题:

    FIDDLE

    HTML:

    <div id="canvasHolder">
    </div>
    

    CSS

    #canvasHolder{
        background: white url(http://placekitten.com/400/700) no-repeat center center;
        background-size: auto 100% ;
        height:100%;
        width:100%;
    }
    

    【讨论】:

      【解决方案2】:

      要使背景图像的高度始终保持为包含元素的 100% 并且宽度自动缩放,保持比例,只需将背景大小设置为“自动 100%”,以便将宽度设置为自动高度为 100%。宽度将按比例缩放,而高度始终保持在包含元素高度的 100%。

      居中提供左右自动裁剪。

      HTML:

        <div class="container">       
        </div>
      

      CSS:

      .container {
        background-image: url(https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQWamCIidr9XrdW7BqKL5DXbqqQxlL8z43Imawqvi5esIqNe7Uh);
        background-size: auto 100%;
        background-repeat: no-repeat;
        background-position: center;
        height: 300px;
      }
      

      请参阅我的 jsBiin 演示 here。在 CSS 中更改容器的高度以查看图像自动按比例缩放。

      【讨论】:

      • 您的示例仅显示调整大小。如果您看到我的问题(第 4 点)和/或玩我的示例小提琴 - 您会看到我想要实现的目标。
      • 我添加了左右裁剪的背景居中。我认为这可以达到与您的 JSFiddle 相同的结果,除非我遗漏了什么。
      猜你喜欢
      • 2013-02-11
      • 2014-03-24
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 2011-06-02
      • 1970-01-01
      相关资源
      最近更新 更多