Node.jsを使用して画像を圧縮するにはどうすればよいですか?手法の紹介
Node.js の使用画像を圧縮するにはどうすればよいですか?次の記事では、Node.js を使用して画像圧縮を実現する方法を紹介します。
#1. 内容紹介
. 当時はまだ画像圧縮という機能が欠けていましたが、今回ようやく解決されました。同時に、従来のバグ (リンクにスペースがあるとエディターが停止する) も解決され、完全に機能するプラグインとみなせるようになりました。興味のある友人はプラグインを検索してください # 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 を返します。圧縮されたバッファを直接使用するだけで済みます。 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', if we get theバッファを使用するには、formUploader .putStream を使用します。それ以外の場合、アップロードには formUploader.putFile のみが必要です。 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)
}
}
)
}
ログイン後にコピー
これで効果を実験できます: 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, "")
以上がNode.jsを使用して画像を圧縮するにはどうすればよいですか?手法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









1. MeituXiuXiu はどのように画像サイズを圧縮しますか? Meituxiuxiu写真サイズ変更チュートリアル! 1. Meitu Xiu Xiu アプリに入り、[画像の美化] をクリックします。 2. 最近のプロジェクトのインターフェイスに移動し、圧縮する必要がある画像を選択します。 3. 画像インターフェイスに入り、下の編集オプションをクリックします。 4. 編集インターフェイスに移動し、画像形式を選択します。 5. 選択が成功したら、画像の中央にあるサイズをクリックして入力します。 6. サイズ変更インターフェイスに入り、画像のサイズを調整し、調整が完了したら [保存] をクリックします。 7. 画像インターフェイスに戻り、右下隅にあるチェック アイコンを見つけてクリックします。 8. 最後に、圧縮画像インターフェイスで [保存] をクリックすると、画像が圧縮されます。

ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

この記事では、NodeJS V8 エンジンのメモリとガベージ コレクター (GC) について詳しく説明します。

ノード用の Docker イメージの選択は些細なことのように思えるかもしれませんが、イメージのサイズと潜在的な脆弱性は、CI/CD プロセスとセキュリティに大きな影響を与える可能性があります。では、最適な Node.js Docker イメージを選択するにはどうすればよいでしょうか?

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

Node 19 が正式リリースされましたので、この記事では Node.js 19 の 6 つの主要な機能について詳しく説明します。

Node.js はどのように GC (ガベージ コレクション) を行うのでしょうか?次の記事で詳しく説明します。

イベント ループは Node.js の基本的な部分であり、メイン スレッドがブロックされていないことを確認することで非同期プログラミングが可能になります。イベント ループを理解することは、効率的なアプリケーションを構築するために重要です。次の記事では、Node のイベント ループについて詳しく説明します。お役に立てれば幸いです。
