如何获得UrlFetchApp.fetch(photoLink)获得的jpeg图像的大小(以像素为单位)?

时间:2013-10-08 20:04:42

标签: google-apps-script

在以HTML格式发送电子邮件的脚本中,我添加了一个存储在公共共享文件夹中的图像。 我使用UrlFetchApp.fetch(photoLink)获取blob但是图像不一定是正确的大小所以在html代码中我使用width和height属性(现在有固定值,请参阅下面的代码)但我希望它是自动的以正确的比例调整大小。

要实现这一点,我需要知道如何获得图像的原始大小(高度和宽度),但我只是不知道如何在不将图像插入中间文档的情况下获得它(这可行但我发现这种方法有点奇怪而且不必要地复杂......此外,我不想每次更改图像文件时都出现无用的文档。)

以下是创建电子邮件的代码的相关部分:

function sendMail(test,rowData,genTitle,day,title,stHour,endHour){
  var photoLink = sh.getRange('H1').getValue();
  var image = UrlFetchApp.fetch(photoLink);
  //************* find the pixel size of the image to get its ratio
  var msgTemplate = '<A HREF="http://www.domain.be/reservations-global/"><IMG SRC="'+photoLink+'" BORDER=0 ALT="logo" HEIGHT=200 WIDTH=300></A><BR><BR>'+
    'Résumé de vos réservations au nom de <NOM><BR><BR><BR><table style="background-color:lightblue;border-collapse:collapse;" border = 1 cellpadding = 5><th></th><th><TABLEHEADER></th><EVENTS></table><BR><CONCLUSION><BR>Cordialement,<BR><BR>';
  var mailTitle = 'Confirmation de réservation - '+getTextFromHtml(genTitle);
  var descr = '';
  for(var d = 0;d<day.length;++d){
    Logger.log(Number(rowData[(d+5)]));
    var content = '<tr bgcolor="#ffffbb" width="100%"><td><NUMBER> </td><td > <DESCRIPTION></td></tr>'
    if(Number(rowData[(d+5)])>1){var pl = ' places'}else{var pl = ' place'};
    content = content.replace('<NUMBER>',rowData[(d+5)]+pl);
    content = content.replace('<DESCRIPTION>',title[d]+' de '+stHour[d]+' heures à '+endHour[d]+' heures');
    if(Number(rowData[(d+5)])>0){
      descr += content;
    }
  }
  msgTemplate = msgTemplate.replace('<NOM>',rowData[1]).replace('<EVENTS>',descr).replace('<TABLEHEADER>',genTitle); 
  var textVersion = getTextFromHtml(msgTemplate.replace(/<br>/gi,'\n').replace(/<td>/gi,'\n'));
//  Logger.log(textVersion)
  if(test){
    MailApp.sendEmail(Session.getEffectiveUser().getEmail(),mailTitle, textVersion,{'htmlBody':msgTemplate,"replyTo" : retour});
  }
  else
  {
    MailApp.sendEmail(rowData[2],mailTitle, textVersion,{'htmlBody':msgTemplate,"replyTo" : retour});
  }
}

2 个答案:

答案 0 :(得分:2)

Apps Script中没有简单的方法可以确定图像大小。还有一些其他项目可能能够分析位图数据并为您提供尺寸。

我最后一次必须解决这个问题。我刚刚写了一个简单的App Engine应用程序来为我做图像数学 -

import webapp2
from google.appengine.api import urlfetch
from google.appengine.api import images
from django.utils import simplejson

class MainHandler(webapp2.RequestHandler):
  def get(self):
    url = self.request.get('url')
    imgResp = urlfetch.fetch(url) #eg. querystring - url=http://xyz.com/img.jpg 
    if imgResp.status_code == 200:
      img = images.Image(imgResp.content);
      jsonResp = {"url":url, "h":img.height, "w":img.width, "format":img.format}
      self.response.headers['Content-Type'] = 'application/json'
      self.response.out.write(simplejson.dumps(jsonResp))

app = webapp2.WSGIApplication([('/imageinfo', MainHandler)], debug=True)

然后我从这样的Apps脚本中调用它 -

function checkImageSizes() {
  var imageUrls = ['http://developers.google.com/apps-script/images/carousel0.png','http://www.w3.org/MarkUp/Test/xhtml-print/20050519/tests/jpeg420exif.jpg'];
  for(var i in imageUrls){
    var resp = JSON.parse(UrlFetchApp.fetch('http://arunimageinfo.appspot.com/imageinfo?url='+imageUrls[i]).getContentText());
    Logger.log('Image at %s is %s x %s',resp.url,resp.w,resp.h);
  }  
}

如果您的音量是一周几次,欢迎您使用我的App Engine实例:)

答案 1 :(得分:1)

我怀疑你可以在应用程序脚本中执行此操作。当然不是原生的,但你可能能够找到或改编一个jpg库来查看二进制blob头并提取图像大小。