是否有允许在 JPEG 文件中创建/修改 EXIF 和 IPTC 部分的本机 Javascript 模块?
注意:我已经有了从 iPhone 和图像一起接收的图像的 Exif 数据。由于图像本身不包含所有元数据,因此我想将其合并并保存在我的服务器上。
我在搜索中遇到了一个单模块,但它似乎被放弃了,它从未实现过编写 EXIF。
https://github.com/logicalparadox/exifdata
有谁知道我可以使用的纯 Javascript 模块吗?
我确实找到了一个可以完成这项工作的 C 库“libexif”。我还没有测试过。我仍在尝试使用 Javascript。
提前致谢。
我正在尝试读取sqlite3表中的所有记录并通过回调返回它们.但似乎尽管使用序列化,这些调用仍然是ASYNC.这是我的代码:
var readRecordsFromMediaTable = function(callback){
var db = new sqlite3.Database(file, sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE);
var allRecords = [];
db.serialize(function() {
db.each("SELECT * FROM MediaTable", function(err, row) {
myLib.generateLog(levelDebug, util.inspect(row));
allRecords.push(row);
}
callback(allRecords);
db.close();
});
}
Run Code Online (Sandbox Code Playgroud)
当回调被触发时,数组将打印'[]'.
是否有另一个我可以进行的调用(而不是db.each)将一次性给我所有行.我没有必要在这里迭代每一行.
如果没有,我如何读取所有记录,然后才调用带有结果的回调?
我已经搜索了如何在Node.js中创建带有回调的sqlite3数据库,但无法找到任何链接。有人可以向我指出文档或提供2-3行代码示例以实现以下目的:
这是我尝试过的:
let dbCreate = new sqlite3.Database("./user1.db", sqlite3.OPEN_CREATE, function(err){
if(!err){
logger.infoLog("Successfully created DB file: " + dbFileForUser + " for user: " + username );
} else {
logger.infoLog("Failed to create DB file: " + dbFileForUser + ". Error: " + err );
}
});
dbHandler[username] = dbCreate;
Run Code Online (Sandbox Code Playgroud)
执行此操作时,出现以下错误:“无法创建数据库文件:./database/user1.db。错误:错误:SQLITE_MISUSE:错误的参数或其他API滥用”
这个没有回调的调用就可以了。
var customDB = new sqlite3.Database(“ ./ custom.db”,sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE);
但是在这种情况下,我将不知道在创建数据库时是否遇到任何错误。
我正在使用 playwright(Firefox 浏览器)来抓取一些网站。当我向下滚动页面时,许多网站会加载更多内容。问题在于, await page.$$("")方法没有获取加载的新内容。
但是如果我在滚动后在控制台上执行document.querySelectorAll(""),那么我也可以获得更新的内容。
我看到 puppeteer 有一个设置page.setCacheEnabled(enabled)允许禁用缓存,但我在 playwright 中找不到类似的东西。
我想知道是否可以在方法中声明一次变量,然后多次重用它们来捕获解构的返回值。
例如:
function verifyStatusAsSignedIn(url, cred){
// code truncated
return { 'error' : false, 'status': true }
}
Run Code Online (Sandbox Code Playgroud)
我可以同时进行声明和解构 JSON。
const { error , status } = verifyStatusAsSignedIn(url, cred);
Run Code Online (Sandbox Code Playgroud)
但是我有更多方法可以调用,它们也将返回带有错误和状态的 JSON,就像方法 'verifyStatusAsSignedIn()' 所做的那样。
理想情况下,我想这样做:
let error, status;
{ error, status } = verifyStatusAsSignedIn(url, cred);
// handle or respond to error and status.
{ error, status } = nextStep(val1, val2);
// handle or respond to error and status
Run Code Online (Sandbox Code Playgroud)
但这给了我一个 lint 警告“预期的声明或声明。
是否可以重用现有变量来解构 json 对象?
我看过几个例子,但无法弄清楚这个。我觉得我在这里错过了一些简单的东西。
在我的应用程序中,我想在特定相册 (ABC) 中拍摄图像并将其添加到我专门为此应用程序创建的另一个相册 (XYZ) 中。这两个相册都可以从 IOS 的默认照片应用程序中看到。
如果我保存图像的另一个副本,我可以成功地将图像分配给相册 XYZ。即如果我现在回到相机胶卷,我会看到同一图像的两个副本。一张分配给专辑 ABC,另一张分配给 XYZ。这不是我想要的。我有数以千计的图像将被分配到相册 XYZ,我不希望两个副本不必要地占用空间。
这是我将图像副本保存到新相册的代码:
-(void) saveImage:(UIImage*) imageToSave toCollection:(NSString *) collectionTitle forRowNumber:(long) rowNumber{
NSLog(@"entered %s", __PRETTY_FUNCTION__);
__block PHFetchResult *photosAsset;
__block PHAssetCollection *collection;
__block PHObjectPlaceholder *placeholder;
// Find the album
PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
fetchOptions.predicate = [NSPredicate predicateWithFormat:@"title = %@", collectionTitle];
// this is how we get a match for album Title held by 'collectionTitle'
collection = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAny options:fetchOptions].firstObject;
// check if album exists
if (!collection)
{
[[PHPhotoLibrary …Run Code Online (Sandbox Code Playgroud) node.js ×4
javascript ×3
sqlite ×2
exif ×1
objective-c ×1
playwright ×1
puppeteer ×1
web-scraping ×1