0

我需要从网络传输 jpg 格式的图像(在此处使用虚拟图像),然后将它们转换为 WebP。这是一次一次的对话(不是批量)

我有以下代码可以提取图像并将其成功保存为 .jpg。

const axios = require("axios")
const fs = require("fs")
const imagemin = require("imagemin")
const imageminWebp = require("imagemin-webp")


async function axios_get_contents (uri, callback) {
    await axios({
        "method": "get",
        "url": uri,
        "responseType": "stream"
    }).
        then((response) => {
            console.log("then1")
            response.data.pipe(fs.createWriteStream("pic1.jpg"))
        })
}

const URL = "https://images.pexels.com/photos/1449767/pexels-photo-1449767.jpeg?auto=compress&cs=tinysrgb&h=750&w=1260"


axios_get_contents(URL).then((ret) => console.log(ret))

下面是我卡住的地方。我正在尝试转换为 webp。本质上,imagemin 代码在创建 jpg 之前运行。

async function axios_get_contents (uri, callback) {
    await axios({
        "method": "get",
        "url": uri,
        "responseType": "stream"
    }).
        then((response) => {
            console.log("then1")
            response.data.pipe(fs.createWriteStream("pic1.jpg"))
        }).
        then((response) => {
            console.log("then2")
            imagemin(["pic1.jpg"], {
                "destination": "compressed-images",
                "plugins": [imageminWebp({"quality": 50})]
            })
        })
}

问题:

如何成功链接 webp 转换?

我是否需要编写一个 jpg 文件,然后将同一个文件读回 imagemin?我可以将缓冲区/var 传递给 imagemin 吗?会节省阅读和写作。

谢谢大佬!!

4

1 回答 1

1

这些中的任何一个都对我有用

// Stream
async function axios_get_contents6 (url, callback) {
    const imageResponse = await axios({"method": "get",
        url,
        "responseType": "stream"})
    await imageResponse.data.pipe(sharp().webp({"quality": 50}).
        toFile("output6.webp", (err, info) => {
            console.log(`err: ${err}`)
    }))
}

// Buffer
async function axios_get_contents7 (url, callback) {
    const imageResponse = await axios({"method": "get",
        url,
        "responseType": "arraybuffer"})
    const buffer = Buffer.from(imageResponse.data, "binary")
    await sharp(buffer).
        webp({"quality": 50}).
        toFile("output5.webp", (err, info) => {
            console.log(err)
    })
}
于 2021-01-05T23:53:27.220 回答