Node.js를 사용하여 이미지를 압축하는 방법은 무엇입니까? 방법 소개
Node.js를 사용하여 이미지를 압축하는 방법은 무엇입니까? 다음 기사에서는 Node.js를 사용하여 이미지 압축을 수행하는 방법을 소개합니다.
1. 콘텐츠 소개
얼마 전, Qiniu에 사진을 업로드하기 위한 Vscode 플러그인을 개발했는데, 그 당시 아직 한 가지 빠진 기능이 있었는데, 바로 이미지 압축이었습니다. 마침내 해결되었습니다. 레거시 버그(링크에 공백이 있으면 편집자가 멈춤)는 이제 완전한 기능을 갖춘 플러그인으로 간주할 수 있습니다. 관심 있는 친구는 플러그인
를 검색할 수 있습니다. Vscode에서 upload-to-qiniu
를 설치합니다.upload-to-qiniu
进行安装。【推荐学习:《nodejs 教程》】
效果预览:
二、node压缩图片
一开始是打算用TinyPNG
的API实现图片压缩,但是尝试过后发现压缩速度特别慢,而且好像还要花钱,果断就放弃了。改为使用imagemin。
这里是有一个坑的: 由于imagemin
不可以直接压缩图片,而是需要依赖imagemin-jpegtran
和imagemin-pngquant
,但是在安装imagemin-pngquant
时会安装不了,找到了一个原因是说这个库是基于一些底层语言实现,所以不能直接安装,需要在电脑上安装另一个依赖libpng
。
安装libpng
直接贴一个安装brew的地址:zhuanlan.zhihu.com/p/90508170,只要对着他说的敲命令基本上就可以安装brew啦。最后我们再执行brew install libpng
,等到libpng
安装成功后,到项目中安装imagemin-pngquant
就可以安装上了。
代码实现压缩图片根据需求我们肯定不希望他将图片压缩后放在文件夹里,而是需要在代码中直接获取到压缩后的内容,直接上传到七牛。那么就要用imagemin.buffer
,这个方法通过接收一个buffer
对象,经过压缩后再返回一个buffer
【추천 학습: "nodejs tutorial
효과 미리보기:
2. 노드는 이미지를 압축합니다
처음에는
TinyPNG
의 API를 사용하여 이미지 압축을 하려고 했으나 시도해보았습니다. 압축속도가 엄청 빠르다는 걸 알았고 속도도 느리고 돈도 많이 드는 것 같아서 과감하게 포기했습니다. 대신 imagemin
imagemin
은 이미지를 직접 압축할 수 없고 imagemin-jpegtran
및 imagemin-pngQuant
에 의존해야 하기 때문입니다. imagemin-pngQuant
를 설치할 때 설치할 수 없습니다. 제가 찾은 이유 중 하나는 이 라이브러리가 일부 기본 언어를 기반으로 하기 때문에 직접 설치할 수 없다는 것입니다. libpng. 컴퓨터에서
. brew 설치 주소를 직접 게시하세요: zhuanlan. zhihu.com/p/90508170, 그가 말하는 대로 명령을 입력하면 기본적으로 Brew를 설치할 수 있습니다. 마지막으로 brew install libpng
를 실행합니다. libpng
가 성공적으로 설치되면 프로젝트에 imagemin-pngQuant
를 설치하면 설치가 가능합니다.
이미지 압축 코드
요구 사항에 따라 우리는 그가 이미지를 압축하여 폴더에 넣는 것을 절대 원하지 않습니다. 대신 코드에서 압축된 콘텐츠를 직접 가져와서 Qiniu에 직접 업로드해야 합니다. . 그런 다음imagemin.buffer
를 사용해야 합니다. 이 메서드는 buffer
개체를 수신하고 압축 후 buffer
를 반환합니다. 버퍼를 Qiniu에 직접 업로드하는 아이디어입니다. // 获取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('error', err)
res = null
}
return res
}
로그인 후 복사 이렇게 하면 이미지 압축을 쉽게 구현할 수 있습니다. 이제 다시 작성하여 Qiniu에 업로드해 보겠습니다. Qiniu를 업로드하기 위해 파일 경로를 직접 전달할 수 있습니다. 압축 후에는 버퍼만 Qiniu에 업로드해야 합니다.
// 获取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('error', err) res = null } return res }
gzipImage ? 'putStream' : 'putFile'을 사용하세요. putStream, 그렇지 않으면 formUploader .putFile 업로드만 필요합니다.컴퓨터에서 png 그림을 선택합니다. 🎜플러그인으로 업로드한 후 링크를 엽니다. 참조: 🎜🎜🎜🎜🎜사진이 성공적으로 압축되었습니다 라~~🎜🎜🎜3. 남은 버그를 해결하세요🎜🎜🎜사용 중 문제가 발견되었습니다. 즉, 가끔 편집기가 갑자기 멈추는 경우가 있었습니다. 그 이유는 링크에 공백이 있으면 항상 멈추고 다른 콘텐츠에 마우스를 올리면 응답이 없기 때문입니다. 따라서 호버 문자열에서 공백을 제거한 후 다음 방법을 실행하여 링크를 얻으세요: 🎜
// 当前行的文本内容 const currentLineText = document.lineAt(position).text.replace(/\s+/g, "")
위 내용은 Node.js를 사용하여 이미지를 압축하는 방법은 무엇입니까? 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









1. MeituXiuXiu는 이미지 크기를 어떻게 압축합니까? 사진 크기 kb 변경에 대한 Meituxiuxiu 튜토리얼! 1. Meitu Xiu Xiu 앱에 들어가서 사진 미화를 클릭하세요. 2. 최근 프로젝트 인터페이스로 이동하여 압축해야 할 사진을 선택하세요. 3. 사진 인터페이스에 들어가서 아래 편집 옵션을 클릭하세요. 4. 편집 인터페이스로 이동하여 이미지 형식을 선택합니다. 5. 선택이 성공한 후, 사진 중앙의 사이즈를 클릭하여 입력해주세요. 6. 크기 수정 인터페이스로 들어가서 이미지 크기를 조정하고 조정이 완료되면 저장을 클릭합니다. 7. 사진 인터페이스로 돌아가서 오른쪽 하단에 있는 확인 아이콘을 찾아 클릭하세요. 8. 마지막으로 압축된 이미지 인터페이스에서 저장을 클릭하면 이미지가 압축됩니다.

Non-Blocking, Event-Driven 기반으로 구축된 Node 서비스는 메모리 소모가 적다는 장점이 있으며, 대규모 네트워크 요청을 처리하는데 매우 적합합니다. 대규모 요청을 전제로 '메모리 제어'와 관련된 문제를 고려해야 합니다. 1. V8의 가비지 수집 메커니즘과 메모리 제한 Js는 가비지 수집 기계에 의해 제어됩니다.

이 기사는 NodeJS V8 엔진의 메모리 및 가비지 수집기(GC)에 대한 심층적인 이해를 제공할 것입니다. 도움이 되기를 바랍니다.

파일 모듈은 파일 읽기/쓰기/열기/닫기/삭제 추가 등과 같은 기본 파일 작업을 캡슐화한 것입니다. 파일 모듈의 가장 큰 특징은 모든 메소드가 **동기** 및 ** 두 가지 버전을 제공한다는 것입니다. 비동기**, sync 접미사가 있는 메서드는 모두 동기화 메서드이고, 없는 메서드는 모두 이기종 메서드입니다.

Node 19가 정식 출시되었습니다. 이 글에서는 Node.js 19의 6가지 주요 기능에 대해 자세히 설명하겠습니다. 도움이 되셨으면 좋겠습니다!

Node용 Docker 이미지를 선택하는 것은 사소한 문제처럼 보일 수 있지만 이미지의 크기와 잠재적인 취약점은 CI/CD 프로세스와 보안에 상당한 영향을 미칠 수 있습니다. 그렇다면 최고의 Node.js Docker 이미지를 어떻게 선택합니까?

Node.js는 GC(가비지 수집)를 어떻게 수행하나요? 다음 기사에서는 이에 대해 설명합니다.

이벤트 루프는 Node.js의 기본 부분이며 메인 스레드가 차단되지 않도록 하여 비동기 프로그래밍을 가능하게 합니다. 이벤트 루프를 이해하는 것은 효율적인 애플리케이션을 구축하는 데 중요합니다. 다음 기사는 Node.js의 이벤트 루프에 대한 심층적인 이해를 제공할 것입니다. 도움이 되기를 바랍니다!
