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 读取它时,它从一开始就引用了同一张旧图片。
您可能会在没有 await
和 await
的情况下混合原始 Promise 的竞争条件。尝试用 = await screenshotDesktop.all()
替换 = 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);
}
根据@titus 的评论,sharp.cache(false)
在导入语句对我有用后立即设置。
我基本上是在里面覆盖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
的情况下混合原始 Promise 的竞争条件。尝试用 = await screenshotDesktop.all()
替换 = 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);
}
根据@titus 的评论,sharp.cache(false)
在导入语句对我有用后立即设置。