[英]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讀取它時,它從一開始就引用了相同的舊圖片。
您可能會在沒有await
和await
情況下將原始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.