javascript - Node.js:读取被覆盖的图片,仅引用初始图像

标签 javascript node.js image sharp

我基本上是在里面覆盖overwriteME.jpg

const screenshotDesktop = require('screenshot-desktop')
const sharp = require('sharp');

(async () => {

      while (1 < 5){
        var currentShot = screenshotDesktop.all()
        .then(imgs => {
            return  fs.writeFile(`/Users/ga/proj/overwriteME.jpg`, imgs[0], (err) => {
                    if (err) throw err;
                    crop();
            });
        });
         await delay(1000);

       }
   async function crop(crop){

       // original size from metadata
       var resizedImage = await sharp('/Users/ga/proj/overwriteME.jpg');
       var metadata = await resizedImage.metadata();
       console.log(metadata);
   };

})();


function delay(timeout) {
  return new Promise((resolve) => {
    setTimeout(resolve, timeout);
  });
}

我期望不同的元数据,因为我正在截取屏幕上播放的视频的屏幕截图并覆盖 overwriteME.jpg,并使用 Sharp 提取元数据。

实际发生的情况是返回相同的元数据,而我认为 Sharp 会反射(reflect)文件更改。

不知何故,文件正在发生变化,但是当敏锐地读取它时,它从一开始就引用了同一张旧图片。

最佳答案

在没有 await 的情况下,您可能会遇到混合原始 Promise 的竞争条件和await -ing。尝试更换= screenshotDesktop.all()= await screenshotDesktop.all() 。您还可以使用 await 简化代码排他性(顺便说一下,不确定 while (1 < 5) 是什么意思):

'use strict';

const fs = require('fs').promises;

const screenshotDesktop = require('screenshot-desktop');
const sharp = require('sharp');

(async () => {
  while (1 < 5) {
    const imgs = await screenshotDesktop.all();
    await fs.writeFile('/Users/ga/proj/overwriteME.jpg', imgs[0]);
    await crop();
  }
})();

async function crop() {
  const resizedImage = await sharp('/Users/ga/proj/overwriteME.jpg');
  const metadata = await resizedImage.metadata();
  console.log(metadata);
}

关于javascript - Node.js:读取被覆盖的图片,仅引用初始图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54621670/

相关文章:

javascript - 在 View 上 react native 半椭圆

javascript - React-Native 将标题从 Navigator 传递到 NavigatorIOS

javascript - 如何使用 node.js 读取输入文件、修改其内容并将结果保存到输出文件?

node.js - NodeJs Stream - 内存不足

javascript - Node.js 中自定义事件和观察者模式的性能

javascript - 从 url 获取 php 输出

python - 从 Python 的输入流加载图像

php - 从服务器获取图像并显示它们

javascript - 使图像在屏幕上显示一半,另一半滚动查看

javascript - 用于在 mm :ss format 中显示计时器的 Moment js