Jadual Kandungan
1. Pengenalan kandungan
2. Nod memampatkan imej
3. Selesaikan pepijat yang tinggal
4. Tamatkan
Rumah hujung hadapan web tutorial js Bagaimana untuk memampatkan imej menggunakan Node.js? Pengenalan kaedah

Bagaimana untuk memampatkan imej menggunakan Node.js? Pengenalan kaedah

Jul 23, 2021 am 09:50 AM
node.js Memampatkan gambar

Bagaimana untuk memampatkan imej menggunakan Node.js? Artikel berikut akan memperkenalkan kepada anda cara menggunakan Node.js untuk mencapai pemampatan imej. Mari lihat!

Bagaimana untuk memampatkan imej menggunakan Node.js? Pengenalan kaedah

1. Pengenalan kandungan

Beberapa masa lalu, kami telah membangunkan pemalam Vscode untuk memuat naik gambar kepada Qiniu Pada masa itu, masih terdapat satu ciri yang hilang: pemampatan imej, yang akhirnya diselesaikan kali ini Pada masa yang sama, pepijat warisan juga telah diselesaikan (editor akan tersekat jika terdapat ruang pautan), dan kini ia boleh dianggap sebagai pemalam yang berfungsi sepenuhnya, rakan yang berminat boleh mencari pemalam upload-to-qiniu dalam Vscode untuk memasangnya.

[Pembelajaran yang disyorkan: "tutorial nodejs"]

Pratonton kesan:

Bagaimana untuk memampatkan imej menggunakan Node.js? Pengenalan kaedah

2. Nod memampatkan imej

Pada mulanya, saya bercadang untuk menggunakan API TinyPNG untuk memampatkan imej, tetapi selepas mencubanya, saya mendapati bahawa kelajuan mampatan adalah sangat lambat, dan nampaknya memerlukan wang, berputus asa dengan tegas. Gunakan imagemin sebaliknya.

Terdapat perangkap di sini: imagemin tidak boleh memampatkan imej secara langsung, tetapi perlu bergantung pada imagemin-jpegtran dan imagemin-pngquant, tetapi ia tidak akan dipasang semasa memasang imagemin-pngquant Saya menemui sebabnya bermakna pustaka ini adalah berdasarkan beberapa pelaksanaan bahasa peringkat rendah, jadi ia tidak boleh dipasang secara langsung Anda perlu memasang pergantungan lain pada komputer libpng.

Pasang libpng

Hanya siarkan alamat untuk memasang brew: zhuanlan.zhihu.com/p/90508170, hanya katakan padanya Secara asasnya , anda boleh memasang brew dengan menaip arahan. Akhir sekali, kami melaksanakan brew install libpng, tunggu sehingga libpng berjaya dipasang, dan pasang imagemin-pngquant dalam projek.

Kod untuk memampatkan imejMengikut keperluan, kami pasti tidak mahu dia memampatkan imej dan memasukkannya ke dalam folder Sebaliknya, kami perlu memasukkan kandungan yang dimampatkan secara terus kod dan muat naik terus ke Tujuh lembu. Kemudian kita perlu menggunakan imagemin.buffer Kaedah ini menerima objek buffer dan mengembalikan buffer selepas pemampatan pelaksanaan:

// 获取buffer
export const getBufferFromFile = (filePath: string): Promise<Buffer> => {
  return new Promise((resolve, reject) => {
    fs.readFile(filePath, function (err: any, res: any) {
      if (!err) {
        resolve(res)
      }
    })
  })
}


// 压缩图片,传入图片文件路径,通过getBufferFromFile方法转为buffer 后进行压缩
const imageGzip = async (loaclFile: string): Promise<any> => {
  const bufferFile = await getBufferFromFile(loaclFile)
  let res
  try {
    res = await imagemin.buffer(bufferFile, {
      plugins: [
        imageminJpegtran(),
        imageminPngquant({
          quality: [0.6, 0.8],
        }),
      ],
    })
  } catch (err) {
    console.log(&#39;error&#39;, err)
    res = null
  }
  return res
}
Salin selepas log masuk

Dengan cara ini, kita boleh melaksanakan pemampatan imej dengan mudah Sekarang mari kita tulis semula dan muat naik ke Qiniu: Kerana tiada pemampatan sebelum ini, kita boleh memuat naik terus laluan fail ke Qiniu , kami hanya mempunyai penimbal, kami perlu memuat naik penimbal ke Qiniu:

gzipImage ? 'putStream' : 'putFile', jika kami mendapat penimbal, gunakan formUploader.putStream, jika tidak, kami hanya memerlukan formUploader .putFile untuk dimuat naik

export const upImageToQiniu = async (
  loaclFile: string,
  cb: { (res: any): void; (arg0: any): void },
  upConfig: QiNiuUpConfig
) => {
  const config = new qiniu.conf.Config()
  const formUploader = new qiniu.form_up.FormUploader(config)
  const putExtra = new qiniu.form_up.PutExtra()
  const token = getToken(upConfig.accessKey, upConfig.secretKey, upConfig.scope)
  let gzipImage
  if (upConfig.gzip) {
    gzipImage = await imageGzip(loaclFile)
  }
  // 获取当前时间戳
  var key = new Date().getTime()
  // 上传调用方法
  const uploadFnName = gzipImage ? &#39;putStream&#39; : &#39;putFile&#39;
  // 上传内容
  const uploadItem = gzipImage ? bufferToStream(gzipImage) : loaclFile
  // 七牛上传
  formUploader[uploadFnName](
    token,
    key,
    uploadItem,
    putExtra,
    function (respErr: any, respBody: any, respInfo: any) {
      if (respErr) {
        throw respErr
      }

      if (respInfo.statusCode === 200) {
        const url = upConfig.domain + &#39;/&#39; + respBody.key
        cb(url)
      }
    }
  )
}
Salin selepas log masuk

Sekarang kita boleh bereksperimen dengan kesan:

Pilih gambar png pada komputer anda:

Bagaimana untuk memampatkan imej menggunakan Node.js? Pengenalan kaedah

Gunakan kami Selepas pemalam dimuat naik, buka pautan dan lihat:

Bagaimana untuk memampatkan imej menggunakan Node.js? Pengenalan kaedah

Mampatan imej berjaya~~

3. Selesaikan pepijat yang tinggal

Masalah yang saya dapati semasa menggunakannya ialah kadang-kadang editor akan tersekat Kemudian saya mendapat tahu bahawa sebabnya ia akan sentiasa tersekat apabila ada adalah ruang dalam pautan, dan kemudian kandungan tuding lain tidak akan bertindak balas. Jadi hanya keluarkan ruang dalam rentetan hover dan kemudian laksanakan kaedah berikut untuk mendapatkan pautan:

// 当前行的文本内容
const currentLineText = document.lineAt(position).text.replace(/\s+/g, "")
Salin selepas log masuk

4. Tamatkan

Kerana dalam hover pratonton Untuk mengelakkan beberapa gambar daripada menjadi terlalu besar dan lambat dimuatkan, parameter pemangkasan Qiniu telah ditambah Oleh itu, pautan gambar jenis lain mungkin tidak boleh dipratonton. Ini akan diselesaikan kemudian. Saya telah memuat naik kod sumber pemalam ke github, semua orang dialu-alukan untuk mengklik mula^ ^. Jika anda mempunyai idea yang lebih baik untuk pemalam, anda juga boleh berkomunikasi antara satu sama lain.

Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Pengenalan kepada Pengaturcaraan! !

Atas ialah kandungan terperinci Bagaimana untuk memampatkan imej menggunakan Node.js? Pengenalan kaedah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk memampatkan saiz imej dalam MeituXiuXiu? Tutorial Meituxiuxiu tentang menukar saiz foto kb! Bagaimana untuk memampatkan saiz imej dalam MeituXiuXiu? Tutorial Meituxiuxiu tentang menukar saiz foto kb! Mar 15, 2024 pm 10:34 PM

1. Bagaimanakah Meitu Xiuxiu memampatkan saiz imej? Tutorial Meituxiuxiu tentang menukar saiz foto kb! 1. Masukkan aplikasi Meitu Xiu Xiu dan klik pada Pengindahan Gambar. 2. Pergi ke antara muka projek terkini dan pilih gambar yang perlu dimampatkan. 3. Masukkan antara muka gambar dan klik pilihan edit di bawah. 4. Lompat ke antara muka penyuntingan dan pilih format imej. 5. Selepas pemilihan berjaya, klik saiz di tengah-tengah gambar untuk masuk. 6. Masukkan antara muka pengubahsuaian saiz, laraskan saiz imej, dan klik Simpan selepas pelarasan selesai. 7. Kembali ke antara muka gambar, cari ikon semak di sudut kanan bawah dan klik padanya. 8. Akhir sekali, dalam antara muka imej termampat, klik Simpan dan imej akan dimampatkan.

Artikel tentang kawalan memori dalam Node Artikel tentang kawalan memori dalam Node Apr 26, 2023 pm 05:37 PM

Perkhidmatan Node yang dibina berdasarkan bukan sekatan dan dipacu peristiwa mempunyai kelebihan penggunaan memori yang rendah dan sangat sesuai untuk mengendalikan permintaan rangkaian besar-besaran. Di bawah premis permintaan besar-besaran, isu yang berkaitan dengan "kawalan memori" perlu dipertimbangkan. 1. Mekanisme kutipan sampah V8 dan had ingatan Js dikawal oleh mesin kutipan sampah

Penjelasan grafik terperinci tentang memori dan GC enjin Node V8 Penjelasan grafik terperinci tentang memori dan GC enjin Node V8 Mar 29, 2023 pm 06:02 PM

Artikel ini akan memberi anda pemahaman yang mendalam tentang memori dan pengumpul sampah (GC) enjin NodeJS V8 saya harap ia akan membantu anda!

Node.js 19 dikeluarkan secara rasmi, mari bercakap tentang 6 ciri utamanya! Node.js 19 dikeluarkan secara rasmi, mari bercakap tentang 6 ciri utamanya! Nov 16, 2022 pm 08:34 PM

Node 19 telah dikeluarkan secara rasmi Artikel ini akan memberi anda penjelasan terperinci tentang 6 ciri utama Node.js 19. Saya harap ia akan membantu anda!

Mari bercakap secara mendalam tentang modul Fail dalam Node Mari bercakap secara mendalam tentang modul Fail dalam Node Apr 24, 2023 pm 05:49 PM

Modul fail ialah enkapsulasi operasi fail asas, seperti membaca/menulis/membuka/menutup/memadam fail, dsb. Ciri terbesar modul fail ialah semua kaedah menyediakan dua versi **segerak** dan ** asynchronous**, dengan Kaedah dengan akhiran penyegerakan adalah semua kaedah penyegerakan, dan kaedah yang tidak semuanya adalah kaedah heterogen.

Mari kita bincangkan tentang cara memilih imej Node.js Docker terbaik? Mari kita bincangkan tentang cara memilih imej Node.js Docker terbaik? Dec 13, 2022 pm 08:00 PM

Memilih imej Docker untuk Node mungkin kelihatan seperti perkara remeh, tetapi saiz dan potensi kelemahan imej itu boleh memberi kesan yang ketara pada proses dan keselamatan CI/CD anda. Jadi bagaimana kita memilih imej Node.js Docker yang terbaik?

Apakah yang perlu saya lakukan jika nod tidak boleh menggunakan arahan npm? Apakah yang perlu saya lakukan jika nod tidak boleh menggunakan arahan npm? Feb 08, 2023 am 10:09 AM

Sebab mengapa nod tidak boleh menggunakan arahan npm adalah kerana pembolehubah persekitaran tidak dikonfigurasikan dengan betul Penyelesaiannya ialah: 1. Buka "Sistem Sifat"; 2. Cari "Pembolehubah Persekitaran" -> "Pembolehubah Sistem", dan kemudian edit persekitaran. pembolehubah; 3. Cari lokasi folder nodejs;

Mari bercakap tentang mekanisme GC (pengumpulan sampah) dalam Node.js Mari bercakap tentang mekanisme GC (pengumpulan sampah) dalam Node.js Nov 29, 2022 pm 08:44 PM

Bagaimanakah Node.js melakukan GC (pengumpulan sampah)? Artikel berikut akan membawa anda melaluinya.

See all articles