簡體   English   中英

Node.js:讀取被覆蓋的圖片,僅引用初始圖像

[英]Node.js: reading a picture which is being overwritten, references the initial image only

我基本上是在覆蓋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可以反映文件更改時,返回了相同的元數據。

文件以某種方式發生了變化,但是當Sharp讀取它時,它從一開始就引用了相同的舊圖片。

您可能會在沒有awaitawait情況下將原始Promises混合在一起而處於競爭狀態。 嘗試將= screenshotDesktop.all()替換= screenshotDesktop.all() = await screenshotDesktop.all() 您還可以使用獨占的await簡化代碼(順便說一下while (1 < 5)不確定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);
}

根據@titus的評論,在導入語句對我有用之后sharp.cache(false)設置了sharp.cache(false)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM