I'm using the google sheets scripting language, and I want to get the ratio of an image from a web link, e.g. this flag.
I have seen a way to do it here, but I want to return the ratio from the function, not put it in a random cell.
So far I have managed to get this, which doesn't seem to work.
function imageSize(imgUrl) {
if (typeof imgUrl == 'undefined') {
imgUrl = 'http://www.google.com/intl/en_ALL/images/logo.gif';
}
PropertiesService.getScriptProperties().setProperty('ratio', 0);
var t = '';
t += '<script>\n';
t += 'function hd(){\n';
t += 'var img = new Image();\n';
t += 'img.onload = function() {\n';
t += "google.script.run.returnVal(this.width / this.height);\n";
t += '}\n';
t += "img.src = '" + imgUrl + "';\n";
t += '}\n';
t += 'google.script.run.withSuccessHandler(google.script.host.close)\n';
t += '.returnVal(hd());\n';
t += '</script>\n';
var output = HtmlService.createHtmlOutput(t);
// output.setSandboxMode(HtmlService.SandboxMode.IFRAME);
// SpreadsheetApp.getUi().showModalDialog(output,'please, wait...');
// output.clear();
Utilities.sleep(2000);
return PropertiesService.getScriptProperties().getProperty('ratio');;
}
function returnVal(h) {
Logger.log(h);
PropertiesService.getScriptProperties().setProperty('ratio', h);
return h;
}
How about this workaround? I think that there are several answers for your situation. So please think of this as one of them. The flow of this script is as follows.
In order to use this sample script, please enable Drive API at Advanced Google Services and API console as follows.
Enable Drive API v2 at Advanced Google Services
Enable Drive API at API console
Sample script
Note :
https://www.theodora.com/flags/e_timor.gif
in your question is used for this script,1.5
is retrieved.References :
If this was not what you want, I'm sorry.
Added :
If you don't want to create files in Google Drive, you can retrieve the aspect ratio using this library. This library can retrieve the image size from a blob, because the binary data of the image is parsed. When this library is used for your situation, the script becomes as follows.