圖片等比例縮放裁切詳解
本文將通過程式碼例項詳細介紹一下如何實現圖片等比例縮放裁切效果。
圖片有兩種應用方式,一種作為子元素存在,一種是作為背景圖片。
在每一種應用方式中,圖片的等比例縮放又可以大致分為如下幾種情況:
(1).確保圖片能夠填充滿元素,超出的部分被裁切或者隱藏。
(2).確保圖片的長或者寬填充滿元素,超出的部分被裁切或者隱藏。
下面通過程式碼例項分別介紹一下上述列舉的中可能,需要的朋友可以做一下參考。
一.作為背景圖片:
通過CSS的background-image屬性可以設定元素的背景圖片效果。
下面就以如下圖片進行相關演示:
上述圖片的尺寸是350*262,下面首先看一段程式碼例項:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>background-clip屬性-螞蟻部落</title> <style type="text/css"> div{ border:10px solid green; width:250px; height:180px; } .bg{ background-image:url(mytest/demo/small.jpg); background-repeat:no-repeat } </style> </head> <body> <div class="bg"></div> </body> </html>
background-image屬性設定元素背景圖片,無法設定背景圖片的縮放效果。
只能是原生態,頂多調整一下背景圖片的位置,或者是否重複。
CSS3新增background-size屬性,它可以設定背景圖片的尺寸。
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>background-clip屬性-螞蟻部落</title> <style type="text/css"> div{ border:10px solid green; width:250px; height:180px; } .bg{ background-image:url(mytest/demo/small.jpg); background-size:200px 100px; background-repeat:no-repeat } </style> </head> <body> <div class="bg"></div> </body> </html>
程式碼執行效果截圖如下:
通過background-size屬性為背景圖片長寬賦予一個固定值,並沒有刻意保證等比例縮放。
background-size屬性有兩個關鍵字屬性值cover與contain,可以滿足背景圖片等比例縮放效果。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>background-clip屬性-螞蟻部落</title> <style type="text/css"> div{ border:10px solid green; width:250px; height:180px; margin:5px; } .cover{ background-image:url(mytest/demo/small.jpg); background-size:cover; background-repeat:no-repeat } .contain{ background-image:url(mytest/demo/small.jpg); background-size:contain; background-repeat:no-repeat } </style> </head> <body> <div class="cover"></div> <div class="contain"></div> </body> </html>
程式碼執行效果截圖如下:
程式碼分析如下:
(1).cover:此屬性值會保證背景圖片等比例縮放填充滿元素,超出元素的部分會被隱藏裁切。
(2).contain:此屬性與cover屬性類似,也是進行等比例縮放,但是它不保證填充滿元素,而是確保在長或者寬某一個方位上填充滿元素,比如在上述程式碼中,由於在高度上最先填充滿元素,於是將放棄寬度上填充元素。
關於background-size屬性內容可以參閱CSS3 background-size一章節。
二.作為子元素:
如果僅要求圖片在某一方位填充滿父元素,那麼只要將對應尺寸設定為100%即可。
圖片可以實現等比例縮放,不會變形,程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>background-clip屬性-螞蟻部落</title> <style type="text/css"> div{ border:10px solid green; width:300px; height:180px; margin:5px; overflow:hidden; } div img{ height:100% } </style> </head> <body> <div class="ant"><img src="mytest/demo/small.jpg"></div> </body> </html>
設定圖片的高度為100%,那麼可以保證在垂直方向填充滿父元素,且是等比例縮放。在寬度上也是同樣的道理,但是有一個問題,那就是可能在某一範圍出現不能填充滿父元素的情況。
無法滿足佈局規整的要求,下面分享一段程式碼例項,它可以實現圖片等比例縮放填充滿整個父元素,超出的部分裁切。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> * { margin:0px; padding:0px; } div { border:10px solid green; width:300px; height:200px; font-size:0px; } </style> <script> let DrawImage = (ImgBox, ImgD, iwidth, iheight) => { ImgBox.style.overflow = "hidden"; console.log(ImgD); console.log(ImgD.width); if (ImgD.width > 0 && ImgD.height > 0) { if (ImgD.width / ImgD.height >= iwidth / iheight) { ImgD.height = iheight; ImgD.width = (image.width / image.height) * iheight; } else { ImgD.width = iwidth; ImgD.height = (ImgD.height / ImgD.width) * iwidth; } } } window.onload = function () { let odiv = document.getElementsByTagName("div")[0]; let oimg = document.getElementById("ant"); DrawImage(odiv, oimg, 300, 200) } </script> </head> <body> <div><img id="ant" src="mytest/demo/small.jpg"></div> </body> </html>
上述程式碼實現了圖片等比例縮放填充滿父元素的功能,程式碼分析如下。
函式四個引數解析如下:
(1).ImgBox:圖片的父元素,也就是它的容器元素。
(2).ImgD:圖片元素物件,也就是將要被縮放的圖片。
(3).iwidth:容器元素的寬度。
(4).iheight:容器元素的高度。
內部程式碼的縮放原理簡介如下:
(1).如果圖片的長寬比大於父元素的長寬比,說明圖片的width相對更大,只要將圖片的高度設定為容器的高度即可,圖片寬度會超出容器的高度,進行裁切即可。
(2).如果圖片的長寬比小於父元素的長寬比,說明圖片的height相對更大,只要將圖片的寬度設定為容器的寬度即可,圖片高度戶會超出容器的高度,進行裁切即可。
(3).如果圖片的長寬比恰好等於父元素的長寬比,只要對寬度所放至容器的寬度即可,這很好理解。
這都是基礎的數學問題,感覺無法介紹的再詳細的,如有任何問題可以在文章後面留言。
相關文章
- JavaScript圖片簡單等比例縮放JavaScript
- 移動端圖片等比例縮放實踐
- Vue3等比例縮放圖片元件Vue元件
- 踩坑!填坑!NodeJS環境使用GraphicIMagicK裁切、縮放圖片NodeJS
- css實現圖片按寬等比例縮放不變形CSS
- CSS實現圖片等比例縮小不變形CSS
- SwiftUI圖片處理(縮放、拼圖)SwiftUI
- JavaScript DOM元素長寬等比例縮放JavaScript
- android imageview 縮放檢視圖片AndroidView
- opencv 圖片幾何變換-縮放OpenCV
- Android 圖片處理之固定視框中的等比例壓縮Android
- 開源圖片工具箱(Img Toolbox) 格式轉換 新增水印 圖片壓縮 圖片裁剪 圖片旋轉 圖片縮放
- 滑鼠懸浮圖片實現縮放效果
- css中圖片按照長寬比縮放CSS
- QLabel顯示圖片 ,並實現縮放
- 自定義圖片裁剪之雙指縮放思路
- 《你不知道的 CSS》之等比例縮放的盒子CSS
- VS+Qt+Halcon——顯示圖片,實現滑鼠縮放、移動圖片QT
- css設定圖片固定寬高,按比例縮放CSS
- .NetCore實現圖片縮放與裁剪 - 基於ImageSharpNetCore
- ugui 縮放圖片使圖片的四個角和四邊保持原樣UGUI
- 圖片響應式縮放,已中心為原點裁剪
- 縮放圖片至固定大小,尺寸不足以0填充
- antd-img-crop,使用 Ant Design Upload 時裁切圖片
- BMP格式圖片縮放及在LCD螢幕展示練習
- HarmonyOS NEXT應用開發之圖片縮放效果實現
- 圖片縮放(不裁剪,按原來比例計算寬高)
- web前端頁面點選預覽圖片及大小縮放Web前端
- 前端圖片壓縮 - H5&Uni-App圖片壓縮前端H5APP
- 圖片上傳方案詳解
- koa 圖片上傳詳解
- JPEG圖片的解碼和壓縮流程
- ??圖片壓縮CanvasCanvas
- canvas 壓縮圖片Canvas
- 圖片壓縮20201109
- Windows設定圖片縮圖Windows
- Js實現任意位置縮放圖片,深入理解背後原理JS
- flutter實現可縮放可拖拽雙擊放大的圖片功能Flutter