首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >来自web的NodeJS流图像,转换为WebP

来自web的NodeJS流图像,转换为WebP
EN

Stack Overflow用户
提问于 2021-01-05 20:05:13
回答 1查看 533关注 0票数 0

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

我有下面的代码,它成功地拉取图像并将其保存为.jpg。

代码语言:javascript
运行
复制
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创建之前运行的。

代码语言:javascript
运行
复制
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?我能不能只把buffer/var传递给imagemin?可以节省阅读和写作时间。

感谢堆!!

EN

回答 1

Stack Overflow用户

发布于 2021-01-06 07:53:27

这两种方法都不适合我。

代码语言:javascript
运行
复制
// 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)
    })
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65578550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档