国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用 Node.js 生成優(yōu)化的圖像格式

這篇具有很好參考價值的文章主要介紹了使用 Node.js 生成優(yōu)化的圖像格式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

使用 Node.js 生成優(yōu)化的圖像格式

圖像是任何 Web 應用程序的重要組成部分,但如果優(yōu)化不當,它們也可能成為性能問題的主要根源。在本文中,我們將介紹如何使用 Node.js 自動生成優(yōu)化的圖像格式,并以最適合用戶瀏覽器的格式顯示它們。

配置

首先我們需要一個為我們處理圖像處理的庫,而Sharp就是本文將使用的圖像處理庫。Sharp 是一個用于圖像處理和操作的高性能 Node.js 庫。它的設計速度快、內(nèi)存效率高,非常適合處理大圖像和生成多種圖像格式。

安裝:

npm i sharp

圖像生成腳本

優(yōu)化網(wǎng)絡圖像的第一步是為每個圖像生成多種格式,每種格式都有自己的優(yōu)點和缺點。某些格式(例如 JPEG)適合具有多種顏色的復雜圖像,而其他格式(例如 WebP)更適合具有較少顏色的簡單圖像。具體的圖片格式分析請看前端圖片格式這篇文章。

要生成不同的圖像格式,我們可以使用 Node.jsSharp 圖像處理庫。下面是一個示例腳本,它為圖像文件夾中的每個圖像生成 avifwebp 格式:

const sharp = require('sharp');
const fs = require('fs');

const inputFolder = 'images';
const outputFolder = 'output';

const formats = ['avif', 'webp'];

if (!fs.existsSync(outputFolder)) {
  fs.mkdirSync(outputFolder);
}

fs.readdir(inputFolder, (err, files) => {
  if (err) {
    console.error(err);
    return;
  }

  files.forEach(file => {
    if (file.endsWith('.jpg') || file.endsWith('.jpeg') || file.endsWith('.png')) {
      const inputPath = `${inputFolder}/${file}`;
      const name = file.substring(0, file.lastIndexOf('.'));

      formats.forEach(format => {
        const outputPath = `${outputFolder}/${name}.${format}`;

        if (!fs.existsSync(outputPath)) {
          sharp(inputPath)
            .toFormat(format, { quality: 80 })
            .toFile(outputPath, (err) => {
              if (err) {
                console.error(err);
              } else {
                console.log(`${name}.${format} saved`);
              }
            });
        }
      });
    }
  });
});

代碼說明

const sharp = require('sharp');
const fs = require('fs');

const inputFolder = 'images';
const outputFolder = 'output';

const formats = ['avif', 'webp'];

在這幾行代碼中,導入sharpfs庫,將輸入文件夾設置為images,將輸出文件夾設置為output,并將要生成的格式定義為avifwebp。

if (!fs.existsSync(outputFolder)) {
  fs.mkdirSync(outputFolder);
}

在這里,代碼檢查是否存在輸出文件夾outputFolder,如果不存在,則使用 fs.mkdirSync()方法來創(chuàng)建它。這可確保在生成任何圖像之前輸出文件夾存在。

fs.readdir(inputFolder, (err, files) => {
  if (err) {
    console.error(err);
    return;
  }
})

使用fs.readdir方法來判斷輸入文件夾是否存在。

files.forEach(file => {
    if (file.endsWith('.jpg') || file.endsWith('.jpeg') || file.endsWith('.png')) {
      //...
    }
})

這段代碼使用forEach方法遍歷輸入文件夾中的所有文件。如果文件名以.jpg、.jpeg、 或.png結(jié)尾,則繼續(xù)生成相應的avifwebp文件。

const inputPath = `${inputFolder}/${file}`;
const name = file.substring(0, file.lastIndexOf('.'));

這里,將輸入文件路徑定義為inputPath,并提取不帶擴展名的文件名作為輸出文件名。

formats.forEach(format => {
  const outputPath = `${outputFolder}/${name}.${format}`;
  if (!fs.existsSync(outputPath)) {
    sharp(inputPath)
      .toFormat(format, { quality: 80 })
      .toFile(outputPath, (err) => {
        if (err) {
          console.error(err);
        } else {
          console.log(`${name}.${format} saved`);
        }
    });
  } 
});

在這里,腳本使用formats.forEach()循環(huán)遍歷每種格式(即avifwebp)。對于每種格式,它將輸出文件路徑定義為outputPath

如果輸出文件不存在,則使用 SharptoFormat()函數(shù)以指定格式生成相應的圖像,質(zhì)量為 80。然后使用toFile()保存輸出文件,并向控制臺記錄一條消息,指示文件已保存。

在瀏覽器中顯示優(yōu)化的圖像

一旦我們?yōu)槊總€輸入圖像生成了多種優(yōu)化的圖像格式,我們就可以在應用程序中顯示它們。為此,我們可以使用 HTML中的<picture><source>元素來指定不同格式的不同圖像源。下面是一個以最適合用戶瀏覽器的格式顯示圖像的例子:

<picture>
  <source srcSet="./output/1.avif" type="image/avif" />
  <source srcSet="./output/1.webp" type="image/webp" />
  <img src="./images/1.png" />
</picture>

img 它將用作不支持avifwebp的瀏覽器的后備顯示圖像。

在瀏覽器的請求:
使用 Node.js 生成優(yōu)化的圖像格式,node,node.js,前端,javascript

可以看到瀏覽器使用webp的方式展示圖片。

結(jié)論

網(wǎng)站上的圖像加載速度可能很慢,并且在不同設備上看起來并不總是很好。重要的是要讓它們加載得更快、看起來更好,這樣人們才能更喜歡我們的網(wǎng)站。在本文中我們學習了如何使用 SharpHTML 中的<picture>,<source>制作同一圖像的不同版本,并為每種設備顯示最佳版本。通過這樣做,我們的網(wǎng)站對于每個使用它的人來說將會更快、看起來更好!文章來源地址http://www.zghlxwxcb.cn/news/detail-661948.html

到了這里,關(guān)于使用 Node.js 生成優(yōu)化的圖像格式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關(guān)文章

  • 學習Node.js需要哪些JavaScript知識

    Lexical Structure ( 詞法 ) JavaScript 的詞法(lexical grammar)。ECMAScript 源碼文本會被從左到右掃描 ,并被轉(zhuǎn)換為一系列的輸入元素,包括 token、控制符、行終止符、注釋和空白符。ECMAScript 定義了一些、字面量以及行尾分號補全的規(guī)則。 Expressions ( 表達式 ) JavaScript 中的

    2024年02月03日
    瀏覽(12)
  • Node.js | JavaScript也能寫后端?

    Node.js | JavaScript也能寫后端?

    本文已收錄于專欄 ?? 《深入淺出Node.js》?? 語雀前端知識沉淀 如果讀者是一個前端開發(fā)的同學,不知道你有沒有過這樣的煩惱: 想做一個全棧的項目,但苦于不懂像 PHP、Python 或 Ruby 等動態(tài)編程語言。 如果專門學習的話,又覺得學習成本太大,不學的話服務端項目沒辦

    2024年02月01日
    瀏覽(24)
  • 【Node.JS】初入前端,學習node.js基本操作

    【Node.JS】初入前端,學習node.js基本操作

    NPM是隨同NodeJS一起安裝的包管理工具,能解決NodeJS代碼部署上的很多問題,常見的使用場景有以下幾種: npm可以分為全局安裝和本地安裝 Node所有API都支持回調(diào)函數(shù),回調(diào)函數(shù)一般作為API的最后一個參數(shù)出現(xiàn) 阻塞代碼實例 非阻塞代碼示例 語法分析 具體示例 事件監(jiān)聽器就是

    2023年04月25日
    瀏覽(27)
  • 運行 Node.js 與瀏覽器 JavaScript

    瀏覽器和 Node.js 都使用 JavaScript 軟件語言 - 但字面上的 運行時環(huán)境 是不同的。 Node.js(又名服務器端 JavaScript)與客戶端 JavaScript 有許多相似之處。它也有很多差異。 盡管兩者都使用 JavaScript 作為軟件語言,但我們可以重點關(guān)注一些關(guān)鍵差異,這些差異使兩者之間的軟件開發(fā)

    2024年02月09日
    瀏覽(29)
  • 前端node.js入門

    前端node.js入門

    (創(chuàng)作不易,感謝有你,你的支持,就是我前行的最大動力,如果看完對你有幫助,請留下您的足跡) 目錄 Node.js 入門? 什么是 Node.js? 什么是前端工程化? ? Node.js 為何能執(zhí)行 JS?? fs 模塊 - 讀寫文件? path 模塊 - 路徑處理 URL 中的端口號? 常見的服務程序? Node.js 模塊化 什

    2024年02月17日
    瀏覽(46)
  • 前后端交互系統(tǒng):在Node.js中運行JavaScript

    前后端交互系統(tǒng):在Node.js中運行JavaScript

    在Node.js中運行JavaScript,您需要編寫適用于服務器端的代碼,而不是瀏覽器端的代碼。以下是一些示例代碼,用于在Node.js中創(chuàng)建一個簡單的HTTP服務器并在瀏覽器中訪問它: 將上述代碼保存到一個名為main.js的文件中,然后在命令行中運行 node .main.js。這將創(chuàng)建一個簡單的HTT

    2024年02月08日
    瀏覽(29)
  • 一份Node.js性能優(yōu)化技巧指南

    一份Node.js性能優(yōu)化技巧指南

    你是一個踏入后端開發(fā)領域的前端愛好者嗎??? 準備好迎接在Node.js錯綜復雜的景觀中驚險刺激的旅程吧!?? 在這個探險中,我們將探索后端的無數(shù)奇跡,從使用Node.js框架快速創(chuàng)建自己的后端,到應對性能分析、測試,深入內(nèi)存管理。???? 加入我們,揭開C++插件的奧秘,征服子進程

    2024年02月21日
    瀏覽(17)
  • 淺談 Node.js 與快速入門使用——前端開發(fā)工程師必須要知道的技術(shù)(文末送書福利6.0)

    淺談 Node.js 與快速入門使用——前端開發(fā)工程師必須要知道的技術(shù)(文末送書福利6.0)

    當下,各行各業(yè)都面臨著大數(shù)據(jù)、人工智能、AR(augmented reality,增強現(xiàn)實)、VR(virtual reality,虛擬現(xiàn)實)等各種互聯(lián)網(wǎng)新技術(shù)的沖擊。在此技術(shù)背景下,Web前端行業(yè)也發(fā)生了巨大的改變,前端程序員已從單純的切圖處理發(fā)展到了需要處理多種后端業(yè)務。其中,Node.js 就是連

    2024年02月09日
    瀏覽(36)
  • Node 調(diào)試利器,前端、Node 開發(fā)必備 - VSCode JS Debug Terminal

    經(jīng)??吹接型瑢W抱怨 Node 調(diào)試麻煩或者是搞不清怎么調(diào)試各種腳本、 Jest 、 Webpack 等等,而偶爾看到的調(diào)試相關(guān)的文章又全都是在寫 inspect 、 launch.json 這些方案,其實有一定學習成本。 而其實在 VSCode 中早已內(nèi)置了相當無腦的 Debug 方式,就是 JavaScript Debug Terminal ,利用它我

    2024年02月05日
    瀏覽(25)
  • Node.js性能優(yōu)化:實用技巧和最佳實踐

    Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行環(huán)境,廣泛用于構(gòu)建快速的、可擴展的網(wǎng)絡應用。盡管 Node.js 已經(jīng)為處理大量并發(fā)連接提供了強大的性能,但在實際開發(fā)中仍然需要采取一些策略來優(yōu)化性能和提升應用響應速度。以下是一些實用的技巧和最佳實踐,可以幫助開發(fā)

    2024年04月17日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包