ホームページ > 記事 > ウェブフロントエンド > Node.jsを使用して画像を圧縮するにはどうすればよいですか?手法の紹介
Node.js の使用画像を圧縮するにはどうすればよいですか?次の記事では、Node.js を使用して画像圧縮を実現する方法を紹介します。
. 当時はまだ画像圧縮という機能が欠けていましたが、今回ようやく解決されました。同時に、従来のバグ (リンクにスペースがあるとエディターが停止する) も解決され、完全に機能するプラグインとみなせるようになりました。興味のある友人はプラグインを検索してください # Vscode で ##upload-to-qiniu
をインストールします。 #[推奨学習: 「
nodejs チュートリアル 」]
#効果のプレビュー:
##2. ノードは画像を圧縮します
最初は、TinyPNG
API を使用して画像圧縮を実現する予定でしたが、試してみたところ、圧縮速度は非常に遅く、やはりお金がかかりそうなので思い切って諦めました。代わりに imagemin
を使用してください。 ここには落とし穴があります。
は画像を直接圧縮できませんが、 imagemin-jpegtran と imagemin-pngquant
に依存する必要があるためです。しかし、imagemin-pngquant
をインストールするときにインストールできません。私が見つけた理由の 1 つは、このライブラリがいくつかの基礎となる言語に基づいているため、直接インストールできないことです。コンピューター ## に別の依存関係をインストールする必要があります。 #libpng 。
libpng をインストールします
brew をインストールするためのアドレスを直接投稿します: zhuanlan.zhihu.com/p/90508170
、それを彼に伝えるだけです、コマンドを入力して brew をインストールできます。最後に、brew install libpng
を実行します。libpng
が正常にインストールされたら、プロジェクトにimagemin-pngquant をインストールできます。
圧縮画像を実現するコード要件によると、画像を圧縮してフォルダーに入れることは絶対に望ましくありません。代わりに、圧縮されたコンテンツを直接取得する必要があります。コードに追加して、Seven Cows に直接アップロードします。次に、imagemin.buffer
を使用する必要があります。このメソッドはbuffer
オブジェクトを受け取り、圧縮後に// 获取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 }
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 ? 'putStream' : 'putFile' // 上传内容 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 + '/' + respBody.key cb(url) } } ) }
プラグインを使用してアップロードした後、リンクを開いて確認してください:
######画像は正常に圧縮されました~ ~#########三、レガシーバグの解決######### 使用中に問題が発生しました。それは、エディターが突然フリーズすることがありました。理由は、リンク内にスペースがあり、他のコンテンツにカーソルを合わせると常にスタックするためでした。したがって、ホバー文字列内のスペースを削除し、次のメソッドを実行してリンクを取得します: ###// 当前行的文本内容 const currentLineText = document.lineAt(position).text.replace(/\s+/g, "")######4. End############ なぜなら、画像をプレビューするときだからです。ホバー中 一部の画像が大きすぎて読み込みが遅くなるのを防ぐために、Qiniu のトリミング パラメーターが追加されているため、他の種類の画像リンクはプレビューできない場合があります。これは後で解決します ^ ^。プラグインのソース コードを ###github### にアップロードしました。どなたでも [開始] をクリックしてください ^ ^。プラグインについてより良いアイデアがある場合は、相互にコミュニケーションすることもできます。 #########プログラミング関連の知識について詳しくは、###プログラミング入門###をご覧ください。 ! ###
以上がNode.jsを使用して画像を圧縮するにはどうすればよいですか?手法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。