1. 程式人生 > >如何在顯示圖片縮圖時不擠壓拉伸圖片

如何在顯示圖片縮圖時不擠壓拉伸圖片

前言:我們在前端顯示圖片縮圖的時候,會遇到不清楚圖片的尺寸,然後使用固定高寬比的img來顯示圖片,這樣會導致高寬比不一致的圖片會被擠壓拉伸。本文站以前端小白的視角來探討這種問題的解決方案。

方案一 max-width和max-height

使用max-width和max-height來做,這種情況下不能保證每一張圖片預覽都是相同寬高的,但是卻不會擠壓拉伸圖片。

如下圖,二、三張圖片的寬高一致,沒什麼問題,一、四、五、六張圖片明顯被擠壓或者拉伸。
這裡寫圖片描述

樣式:

img {
    width: 450px;
    height: 450px;
}

<img src="timg.jpg"/>
<img src="timg%20(1).jpg"/>
<img src="timg%20(2).jpg"/>
<img src="timg%20(3).jpg"/>
<img src="timg%20(4).jpg"/>
<img src="timg%20(5).jpg"/>

修改成max-width和max-height之後的效果:
這裡寫圖片描述
樣式:

img {
    max-width: 450px;
    max-height: 450px;
}

三張圖片的顯示比較正常了,但是高度沒有達到450px,但是保留了完整圖片的預覽,這種方式是比較簡單的解決方法,如果想要一致的寬高,那麼就需要裁剪圖片了。下面的幾種方案都是涉及裁剪的方案。

下面的三種方案以下圖為例:
這裡寫圖片描述

方案二 使用background-size屬性的cover值或者contain

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

.container {
    width: 150px;
    height: 100px;
    background-image: url("http://i.stack.imgur.com/2OrtT.jpg");
    background-size: cover;
    background-repeat: no-repeat;
    background-position: 50% 50%;
}

.container {
    width: 150px;
    height: 100px;
    background-image: url("http://i.stack.imgur.com/2OrtT.jpg");
    background-size: contain;
    background-repeat: no-repeat;
    background-position: 50% 50%;
}

按照單詞的字面意思:

  • cover 把背景影象擴充套件至足夠大,以使背景影象完全覆蓋背景區域。背景影象的某些部分也許無法顯示在背景定位區域中。
  • contain 把影象影象擴充套件至最大尺寸,以使其寬度和高度完全適應內容區域。 這種方式類似與第一種實現。​

cover實現效果:
這裡寫圖片描述

contain實現效果:
這裡寫圖片描述

方案三 使用CSS3的object-fit屬性

<img src="http://i.stack.imgur.com/2OrtT.jpg" class="cover" width="242" height="363" />

.cover {
  object-fit: cover; // contain
  width: 50px;
  height: 100px;
}

object-fit CSS 屬性指定替換元素的內容應該如何適應到其使用的高度和寬度確定的框。
這個屬性的值有以下幾種:

  • fill:被替換的內容大小可以填充元素的內容框。 整個物件將完全填充此框。 如果物件的高寬比不匹配其框的寬高比,那麼該物件將被拉伸以適應。相當於固定寬高下未做任何調整的樣式。

  • contain:被替換的內容將被縮放,以在填充元素的內容框時保持其寬高比。 整個物件在填充盒子的同時保留其長寬比,因此如果寬高比與框的寬高比不匹配,該物件將被新增“黑邊”。和backgroud-size屬性的contain類似,只是多了黑邊。

  • cover:被替換的內容大小保持其寬高比,同時填充元素的整個內容框。 如果物件的寬高比與盒子的寬高比不匹配,該物件將被剪裁以適應。和background-size屬性的cover類似。

  • none:被替換的內容尺寸不會被改變。

  • scale-down:內容的尺寸就像是指定了none或contain,取決於哪一個將導致更小的物件尺寸。

object-fit: cover的效果:
這裡寫圖片描述

object-fit: contain的效果:
這裡寫圖片描述

方案四 container包裹,設定overflow:hidden

<div class="container"><img src="http://i.stack.imgur.com/2OrtT.jpg" /></div>
.container {
    width: 300px;
    height: 200px;
    display: block;
    position: relative;
    overflow: hidden;
}

.container img {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
}

居中圖片(jQuery):

var conHeight = $(".container").height();
var imgHeight = $(".container img").height();
var gap = (imgHeight - conHeight) / 2;
$(".container img").css("margin-top", -gap);

效果:
這裡寫圖片描述

方案五 懶人必備 jqthumb庫

功能比較豐富,使用簡單,詳見jqthumb

能夠實現的效果:
這裡寫圖片描述

相關推薦

如何在顯示圖片擠壓圖片

前言:我們在前端顯示圖片縮圖的時候,會遇到不清楚圖片的尺寸,然後使用固定高寬比的img來顯示圖片,這樣會導致高寬比不一致的圖片會被擠壓拉伸。本文站以前端小白的視角來探討這種問題的解決方案。 方案一 max-width和max-height 使用max-w

使用PHP實現生成固定大小圖片功能(智慧裁剪,圖片失真)

<?php //影象處理類 class Image { private $file; //圖片地址 private $width; //圖片長度 private $height; //圖片長度 private $type; //圖片型別

Android 防止白屏與華為手機歡迎頁面全屏設定背景圖片

1、在drawable裡面書寫歡迎頁面的背景splash_bg檔案 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/re

背景圖片在ie8瀏覽器覆蓋問題解決

1.html<div class="top-content"> <!--<img src="../../../resources/img/project/appro-anlyze

移動端設置, mobile , 一張圖片作為背景 ,平鋪 ,自動 , 圖片 鋪滿視界 ,窗口. background-image , background-size, background-repeat

效果 背景 dev 技術 oct pla div osi eight 1. 效果: 瀏覽器: 手機模擬: 2.代碼: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head&g

DEDE在文章列表文章沒有顯示圖片,有的則顯示

解決在文章列表文章沒有縮圖的不顯示圖片,有的則顯示縮圖在5.3最開始的版本。好象是有這個功能的。 就是在列表裡。。如果改文章沒有縮圖則不顯示預設的 沒有縮圖的土片。如果有則顯示縮圖 但在後續的升級過程中。官方把這個功能修改掉了。。 不知道是有意還是無意的 我自己剛好需要這樣

Windows Server 2008 顯示圖片

在 Windows Server 2008 中,圖片不能顯示縮圖。 解決辦法: 1. 開啟資源管理器,依次選擇 Organize -> Folder and search options 2. 點選 View 選項卡,將 Always show icons, never thumb

簡單實現前端選擇上傳圖片顯示

效果 實現程式碼 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>修改資訊</title> <sc

Winform下使用ListView控制元件和ImageList控制元件顯示圖片

一、基本概念 1、ImageList控制元件 ImageList元件,又稱為圖片儲存元件,它主要用於儲存圖片資源,然後在控制元件上顯示出來,這樣就簡化了對圖片的管理。ImageList元件的主要屬性是Images,它包含關聯控制元件將要使用的圖片。每個單獨的圖片可以通過其索引值或鍵值來訪問。

Windows7無法顯示.png、.jpg圖片的問題

實驗環境(藍色粗體字為特別注意內容) 1,環境:Windows 7 Ultimate 2,參考文獻http://www.xiazaizhijia.com/rjjc/20481.html 今天開啟電腦的時候突然發現電腦的.png檔案和.jpg檔案的圖示都無法正常顯示,其他格式的縮圖比如wo

listview顯示圖片的問題

Listview中包含許多不同格式的檔案,對圖片格式生成縮圖顯示。那麼我的問題來了:如果圖片過多,在下滑或者上滑的時候,其他格式的檔案顯示的圖示會亂掉,會顯示成圖片縮圖的樣子,打斷點除錯發現非圖片格式檔案走的是正確的顯示方式,但是實際顯示出來的確是某個圖片縮圖。 附上顯示方

php實現等比例生成圖片失真

//等比例生成圖片縮圖不失真 function resizeImage($im,$maxwidth,$maxheight,$name,$filetype){     $pic_width = imagesx($im);     $pic_height = imagesy($

解決win10系統alt+tab切換程式顯示程式問題

描述:win10系統alt+tab切換時候變成了以前小圖示模式,本來應該是顯示程式縮圖的。 解決: 1、開啟登錄檔,定位到 HKEY_CURRENT_USER\Software\Microsoft\W

DEDE列表呼叫有顯示,無顯示

在list_article.htm模板頁裡,有文章列表沒有圖片,但是前面會顯示“無縮圖”,就是當沒有圖片的時候,怎麼樣去掉這個“無縮圖”的原始預設縮圖, 下面我們只需要把原來列表呼叫標籤中的以下程式碼: [field:array runphp='yes']@me = (

Django admin後臺顯示圖片

直接上程式碼 定義一個upload_img來返回顯示圖片的html 定義顯示圖片說明和allow_tags mark_safe方法於django.utils.safestring匯入

IOS應用開發-圖片處理(圖片 建立 解決圖片旋轉的問題 圖片編碼及上傳 將圖片寫入磁碟)

在做專案時我們經常要對圖片進行一些處理,以達到效能優化或滿足需求。常見的情形有以下幾種 //http://stackoverflow.com/questions/5427656/ios-uiimagepickercontroller-result-image-orien

微信分享顯示右邊

官網啥都不說了.直接上圖吧右邊的縮圖不顯示,試了好多好多的辦法,下面是用的最多的,(下面這倆方法僅針對我個人不管用而已)1,在body裡面加一個不可見的div包一個img ×2,更改圖片路徑 把相對改成

安卓非同步載入圖片(顯示)的實現

/** * 根據指定的影象路徑和大小來獲取縮圖 * 此方法有兩點好處: * 1. 使用較小的記憶體空間,第一次獲取的bitmap實際上為null,只是為了讀取寬度和高度, * 第二次讀取的bitmap是根

js通過添加隨機數的方法,解決多張圖片加載由於緩存導致圖片無法正確顯示的問題

原因 顯示 rand class var rip 圖片加載 提交數據 cti 問題出現描述:當對列表中某個圖片進行重新編輯時,提交後會發現圖片列表仍會出現修改之前的圖片,新圖片並未覆蓋。 問題出現原因:緩存問題。 解決辦法:通過js方法,在每張圖片路勁後面添加一個隨機數,這

JAVA生成圖片、JAVA擷取圖片區域性內容

目前,google已經有了更好的處理JAVA圖片的工具,請搜尋:Thumbnailator    package com.ares.image.test; import java.awt.Color; import java.awt.Graphics; impor