2013-10-08 19 views
1

在以HTML格式发送电子邮件的脚本中,我添加了存储在公共共享文件夹中的图像。 我得到的blob使用UrlFetchApp.fetch(photoLink),但图像不一定是正确的大小,所以在HTML代码中我使用宽度和高度属性(现在与固定值,请参阅下面的代码),但我希望它会自动调整大小与正确的比例。如何获得我用UrlFetchApp.fetch(photoLink)获得的jpeg图像的大小(以像素为单位)?

为了实现这一点,我需要知道如何获得图像的原始大小(高度和宽度),但我只是不知道如何得到它没有插入图像在中间文件(这将工作,但我发现这种方法有点奇怪和不必要的复杂...此外,我不觉得每次更改图像文件时都会出现无用的文档)。

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

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

在Apps脚本中没有简单的方法来确定图像的大小。还有一些其他项目可能能够分析位图数据并给出尺寸。

上次我不得不解决这个问题。我只写了一个简单的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) 

然后我把它从Google 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的实例如果你的音量是一周几次:)

+0

嗨阿伦,谢谢。我的音量大概是一个月一到两次;-)所以我很乐意使用它。也就是说,你的代码飞得很高,我必须试着去理解它,并希望理解它是如何工作的。如果我失败了,我会回到你身边(如果你不介意的话)。 Cheers,Serge –

+0

App Engine部分执行一些简单的图像高度/宽度计算,并将值作为JSON返回,以便Apps脚本可以使用它。祝你好运! –

+0

嗨阿伦,小问题:我刚刚注意到,这个代码不适用于名称中有空格的图像......,这是正常的吗?不是一个大问题,因为我当然可以重命名它,但我很好奇:-)例如:https://dl.dropboxusercontent.com/u/211279/photo%20sylvette.jpg –

1

我怀疑你可以在应用程序脚本做到这一点。当然不是本地的,但你可能能够找到或改编一个查看二进制blob头文件并提取图像大小的jpg库。

相关问题