整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          html頁面中css縮放圖片的方法

          html頁面制作中,可以利用 CSS 中的 transform 屬性對圖片進(jìn)行旋轉(zhuǎn),縮放,移動或傾斜的操作。而今天我們只說說 transform 屬性對圖片進(jìn)行等比例的縮放操作。

          css transform 屬性的介紹

          transform:該屬性向元素應(yīng)用 2D 或 3D 轉(zhuǎn)換。它允許我們對元素進(jìn)行旋轉(zhuǎn)、縮放、移動或傾斜的操作。

          縮放使用值:

          scaleY(n):對高度進(jìn)行縮n倍的縮放

          scaleX(n):對寬度進(jìn)行縮放,n指的是縮放比例

          scale(n):對整體高度和寬度進(jìn)行縮放,n為縮放的比例,為數(shù)字

          示例代碼:

          transform: scale(2)
          

          css圖片寬度縮放

          scaleX():可以對元素(圖片)的寬度進(jìn)行縮放,以下代碼是將原來的圖片的寬度放大了2倍。

          示列代碼:

          <div class="divimg">
           <img src="biao.png" >
           <br/>
           <!--寬度縮放-->
           <img src="biao.png" style="transform:scaleX(2);">
          </div>
          

          運行結(jié)果:

          tml中img圖片進(jìn)行等比例縮放的實例代碼

          img圖片等比例縮放的方法

          HTML中,要修改img元素定義的圖片的大小,且是等比例縮放,不改變寬和高的比值,那么可以采用只設(shè)置img元素屬性中width和height中的任何一個,不要同時設(shè)置兩個即可實現(xiàn)img圖片的等比例縮放效果。下面將通過兩個實例來分別實現(xiàn)這兩種方法。

          width等比例縮放img圖片實例代碼,及在線編輯器

          為了可以與原圖片的大小進(jìn)行對照,下面的實例使用HTML的注釋符號將等比例縮放的代碼進(jìn)行了注釋,第一遍運行完之后,可以將第一行的代碼刪除(在線刪除,因為這是一個在線編輯器),然后將第二行代碼中的注釋符號去除掉,接著再運行一遍看看等比例縮放的效果:

          <img src='../../static/img/test.jpg'>
          <!-- <img src='../../static/img/test.jpg' width="50%"> -->

          height等比例縮放實例代碼

          這邊的代碼與上面的幾乎一樣,只是將width的屬性修改成為height的屬性,如下:

          <img src='../../static/img/test.jpg'>
          <!-- <img src='../../static/img/test.jpg' height="50%"> -->

          提示:如上面的兩個實例,將width和height分別設(shè)置為50%都可以等比例縮放圖片,但得到的圖片的大小不一定一樣。

          等比例縮放的另外一種方法

          當(dāng)然了,如果要通過同時設(shè)置img圖片的width和height兩個屬性來達(dá)到等比例縮放圖片的話也是可以的,但是要先計算一下圖片的寬度和高度的比例,之后再等比例縮放。

          來源:笨鳥工具-璞玉天成,大器晚成

          原文:html img圖片等比例縮放的代碼 | HTML教程

          免責(zé)聲明:內(nèi)容僅供參考,不保證正確性

          白從寬吧,我就是那個花了兩天兩夜才把 1M 圖片優(yōu)化到 100kb 的家伙——王小二!

          自從因為一篇報道登上熱搜后,我差點抑郁,每天要靠 50 片安眠藥才能入睡。

          網(wǎng)絡(luò)上曝光的那些關(guān)于一碼通的消息,有真有假,我這里就不再澄清了。就說說我是怎么把圖片從 1M 優(yōu)化到 100kb 的故事吧。

          是的,由于系統(tǒng)群體規(guī)模和訪問規(guī)模的特殊性,每一行代碼、每一張圖片、每一個技術(shù)文檔都反復(fù)核準(zhǔn),優(yōu)化再優(yōu)化,精益求精。為確保系統(tǒng)運行得更高效,我們將一張圖片從1MB壓縮到500KB,再從500KB優(yōu)化到100KB。

          這樣的工作在外人看起來,簡單到就好像悄悄給學(xué)妹塞一張情書就能讓她做我女朋友一樣簡單。

          但殊不知,這其中蘊含著極高的技術(shù)含量!

          不信,我給你們普及下。

          一、圖像壓縮

          圖像壓縮是數(shù)據(jù)壓縮技術(shù)在數(shù)字圖像上的應(yīng)用,目的是減少圖像數(shù)據(jù)中的冗余信息,從而用更加高效的格式存儲和傳輸數(shù)據(jù)。

          圖像壓縮可以是有損數(shù)據(jù)壓縮,也可以是無損數(shù)據(jù)壓縮。

          怎么樣?

          是不是感覺圖像壓縮技術(shù)沒有想象中那么簡單了?

          二、Java數(shù)字圖像處理

          作為這次“20 多萬外包項目”的“主力開發(fā)人員”,我這里就給大家介紹下 Java 數(shù)字圖像處理技術(shù)吧,一開始我就是用它來處理圖片的。

          數(shù)字圖像處理(Digital Image Processing)是通過計算機對圖像進(jìn)行去除噪聲、增強、復(fù)原、分割、提取特征等處理的方法和技術(shù)。

          輸入的是圖像信號,然后經(jīng)過 DIP 進(jìn)行有效的算法處理后,輸出為數(shù)字信號。

          為了壓縮圖像,我們需要讀取圖像并將其轉(zhuǎn)換成 BufferedImage 對象,BufferedImage 是 Image 類的一個子類,描述了一個具有可訪問的圖像數(shù)據(jù)緩沖區(qū),由 ColorModel 和 Raster 的圖像數(shù)據(jù)組成。

          廢話我就不多說了,直接進(jìn)入實戰(zhàn)吧!

          三、圖像壓縮實戰(zhàn)

          剛好我本地有一張之前用過的封面圖,離 1M 只差 236 KB,可以拿來作為測試用。

          這其中要用到 ImageIO 類,這是一個靜態(tài)類,提供了一系列方法用來讀和寫圖像,同時還可以對圖像進(jìn)行簡單的編碼和解碼。

          比如說通過 ImageIO.read() 可以將圖像讀取到 BufferedImage 對象:

          File input = new File("ceshi.jpg");
          BufferedImage image = ImageIO.read(input);

          比如說通過 ImageIO.getImageWritersByFormatName() 可以返回一個Iterator,其中包含了通過命名格式對圖像進(jìn)行編碼的 ImageWriter。

          Iterator<ImageWriter> writers =  ImageIO.getImageWritersByFormatName("jpg");
          ImageWriter writer = (ImageWriter) writers.next();

          比如說通過 ImageIO.createImageOutputStream() 可以創(chuàng)建一個圖像的輸出流對象,有了該對象后就可以通過 ImageWriter.setOutput() 將其設(shè)置為輸出流。

          File compressedImageFile = new File("bbcompress.jpg");
          OutputStream os =new FileOutputStream(compressedImageFile);
          ImageOutputStream ios = ImageIO.createImageOutputStream(os);
          writer.setOutput(ios);

          緊接著,可以對 ImageWriter 進(jìn)行一些參數(shù)配置,比如說壓縮模式,壓縮質(zhì)量等等。

          ImageWriteParam param = writer.getDefaultWriteParam();
          
          param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
          param.setCompressionQuality(0.01f);

          壓縮模式一共有四種,MODE_EXPLICIT 是其中一種,表示 ImageWriter 可以根據(jù)后續(xù)的 set 的附加信息進(jìn)行平鋪和壓縮,比如說接下來的 setCompressionQuality() 方法。

          setCompressionQuality() 方法的參數(shù)是一個 0-1 之間的數(shù),0.0 表示盡最大程度壓縮,1.0 表示保證圖像質(zhì)量很重要。對于有損壓縮方案,壓縮質(zhì)量應(yīng)該控制文件大小和圖像質(zhì)量之間的權(quán)衡(例如,通過在寫入 JPEG 圖像時選擇量化表)。 對于無損方案,壓縮質(zhì)量可用于控制文件大小和執(zhí)行壓縮所需的時間之間的權(quán)衡(例如,通過優(yōu)化行過濾器并在寫入 PNG 圖像時設(shè)置 ZLIB 壓縮級別)。

          整體代碼如下所示:

          public class Demo {
              public static void main(String[] args) {
          
                  try {
                      File input = new File("ceshi.jpg");
                      BufferedImage image = ImageIO.read(input);
          
                      Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg");
                      ImageWriter writer = (ImageWriter) writers.next();
          
                      File compressedImageFile = new File("bbcompress.jpg");
                      OutputStream os = new FileOutputStream(compressedImageFile);
                      ImageOutputStream ios = ImageIO.createImageOutputStream(os);
                      writer.setOutput(ios);
          
                      ImageWriteParam param = writer.getDefaultWriteParam();
          
                      param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
                      param.setCompressionQuality(0.01f);
          
                      writer.write(null, new IIOImage(image, null, null), param);
          
                      os.close();
                      ios.close();
                      writer.dispose();
          
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
          }

          執(zhí)行壓縮后,可以看到圖片的大小壓縮到了 19 KB:

          可以看得出,質(zhì)量因子為 0.01f 的時候圖片已經(jīng)有些失真了,可以適當(dāng)提高質(zhì)量因子比如說 0.5f,再來看一下。

          圖片質(zhì)量明顯提高了,但大小依然只有 64 KB,壓縮效果還是值得信賴的。

          四、其他開源庫

          接下來,推薦一些可以輕松集成到項目中的圖像處理庫吧,它們?nèi)际敲赓M的。

          1)ImageJ,用 Java 編寫的,可以編輯、分析、處理、保存和打印圖像。

          2)Apache Commons Imaging,一個讀取和寫入各種圖像格式的庫,包括快速解析圖像信息(如大小,顏色,空間,ICC配置文件等)和元數(shù)據(jù)。

          3)ImageMagick,可以讀取和寫入超過100種格式的圖像,包括DPX、EXR、GIF、JPEG、JPEG-2000、PDF、PNG、Postscript、SVG和TIFF。還可以調(diào)整大小、翻轉(zhuǎn)、鏡像、旋轉(zhuǎn)、扭曲、剪切和變換圖像,調(diào)整圖像顏色,應(yīng)用各種特殊效果,包括繪制文本、線條、多邊形、橢圓和貝塞爾曲線。

          4)OpenCV,由BSD許可證發(fā)布,可以免費學(xué)習(xí)和商業(yè)使用,提供了包括 C/C++、Python 和 Java 等主流編程語言在內(nèi)的接口。OpenCV 專為計算效率而設(shè)計,強調(diào)實時應(yīng)用,可以充分發(fā)揮多核處理器的優(yōu)勢。

          這里就以 OpenCV 為例,來演示一下圖像壓縮。當(dāng)然了,OpenCV 用來壓縮圖像屬于典型的大材小用。

          第一步,添加 OpenCV 依賴到我們的項目當(dāng)中,以 Maven 為例。

          <dependency>
           <groupId>org.openpnp</groupId>
           <artifactId>opencv</artifactId>
           <version>4.5.1-2</version>
          </dependency>

          第二步,要想使用 OpenCV,需要先初始化。

          OpenCV.loadShared();

          第三步,使用 OpenCV 讀取圖片。

          Mat src = Imgcodecs.imread(imagePath);

          第四步,使用 OpenCV 壓縮圖片。

          MatOfInt dstImage = new MatOfInt(Imgcodecs.IMWRITE_JPEG_QUALITY, 1);
          Imgcodecs.imwrite("resized_image.jpg", sourceImage, dstImage);

          MatOfInt 的構(gòu)造參數(shù)是一個可變參數(shù),第一個參數(shù) IMWRITE_JPEG_QUALITY 表示對圖片的質(zhì)量進(jìn)行改變,第二個是質(zhì)量因子,1-100,值越大表示質(zhì)量越高。

          執(zhí)行代碼后得到的圖片如下所示:

          借這個機會,來對比下 OpenCV 和 JDK 原生 API 在壓縮圖像時所使用的時間。

          這是我本機的配置情況,早年買的頂配 iMac,也是我的主力機。一開始只有 16 G 內(nèi)存,后來加了一個 16 G 內(nèi)存條,不過最近半年電腦突然死機重啟的頻率明顯提高了,不知道是不是 Big Sur 這個操作系統(tǒng)的問題還是電腦硬件老了。

          結(jié)果如下所示:

          opencvCompress壓縮完成,所花時間:1070
          jdkCompress壓縮完成,所花時間:322

          壓縮后的圖片大小差不多,都是 19 KB,并且質(zhì)量因子都是最低值。

          四、一點點心聲

          經(jīng)過上面的技術(shù)分析后,相信你們都明白了,把1M圖片優(yōu)化到100kb實在是一件“不太容易”的事情。。。。

          100KB 很小了吧?只有原來的 1/10。

          要知道,我可是連續(xù)加班了兩天兩夜,不眠不休。

          累到最后,我趴在電腦上都睡著了。

          沒想到哈喇子直接給電腦整短路了,我這才算是從夢里面嚇醒來了!

          來源:https://www.cnblogs.com/qing-gee/p/15980369.html


          主站蜘蛛池模板: 国产伦精品一区二区三区免费迷| 日本无码一区二区三区白峰美| 亚洲一区二区三区夜色 | 国产精品538一区二区在线| 高清一区二区三区日本久| 亚洲A∨精品一区二区三区| 激情无码亚洲一区二区三区 | 精品一区中文字幕| 亚洲综合无码一区二区痴汉 | 国产福利微拍精品一区二区| 成人影片一区免费观看| 人妻无码一区二区视频| 成人h动漫精品一区二区无码| 任你躁国语自产一区在| 国产精品亚洲不卡一区二区三区| 精品无码国产AV一区二区三区 | 精品无人乱码一区二区三区 | 中文字幕乱码一区二区免费| 无码人妻精品一区二区蜜桃百度| 国产精品亚洲专一区二区三区| 亚无码乱人伦一区二区| 加勒比无码一区二区三区| 日韩一区二区三区射精| 在线视频国产一区| 国产精品亚洲一区二区在线观看| 韩国一区二区视频| 久久精品无码一区二区三区不卡| 无码aⅴ精品一区二区三区| 日本一区二三区好的精华液| 福利国产微拍广场一区视频在线| 精品国产一区二区二三区在线观看 | 男人的天堂精品国产一区| 一区二区三区在线免费观看视频| 亚洲国产成人精品久久久国产成人一区二区三区综 | 国偷自产Av一区二区三区吞精 | 国产成人亚洲综合一区| 国产一区二区在线| 亚洲中文字幕丝袜制服一区 | 波多野结衣精品一区二区三区| 无码精品人妻一区二区三区影院| 国精品无码一区二区三区在线蜜臀|