2016-04-29 2 views
0

Ich schreibe ein Google Text & Tabellen-Add-on. Was es tut: Es nimmt Bilder aus einem Google Drive-Ordner und legt sie in einem Google Doc. ... Nun, das ist es in aller Kürze ;-)Google Apps Script DriveApp-Datei: Bestimmen, ob ein Bild Quer- oder Hochformat ist

Ich frage mich, ob es eine Möglichkeit gibt, die Bildausrichtung (Querformat/Hochformat) zu finden, BEVOR Sie es in Google Doc einfügen. (Sobald er eingesetzt wird, ist es kein Problem, aber ich brauche, um es herauszufinden, bevor das Bild eingefügt wird, um das Skript schneller läuft.)

Also, was ich brauche, ist so etwas wie diese:

function getImagesFromFolder(ID){ 

DriveApp.getFolderById(ID).getFiles(); 
var mimetypes = ["image/png","image/jpeg","image/gif","image/bmp"]; 
var images = []; 
while (files.hasNext()) 
{ 
var file = files.next(); 
if(mimetypes.indexOf(file.getMimeType()) != -1) 
    { 
    var imageObject = {}; 
    imageObject.fileAsJpeg = file.getBlob().getAs("image/jpeg") 
    imageObject.orientation = getImagefileOrientation(file) 

//Here is the issue! I need a 'getImageFileOrientation-function' that returns 'landscape' or 'portrait' 

    images.push(imageObject); 
    } 
} 
return images; 
} 



//------Later on I will be using---------- 
    for (var i = 0;i<images.length;i++) 
    { 
    if (images[i].orientation == 'portrait') 
     { 
     // some code that rotates the image when it is inserted in the Google Doc. Not the problem. 
     } 
     else 
     { 
     googleDocBody.insertImage(images[i].fileAsJpeg); //Not the problem 
     } 
    } 

Vielen Dank im Voraus!

Jasper

+1

Die Funktionen '.getWidth' und' .getHeight', die einem Bild in Docs, Forms und Tabellen zugeordnet sind, stehen nach dem Einfügen zur Verfügung. Haben Sie versucht, sie in ein leeres Dokument einzufügen, um an diese Attribute zu kommen und sie dann zu verwerfen? Geht das schneller? – Jonathon

+0

[Mogsdads Antwort] (http://stackoverflow.com/questions/30582284/how-to-extract-exif-data-from-jpeg-files-in-drive) sollte helfen – Adelin

+0

@Adelin: das sieht wirklich sehr hilfreich aus! –

Antwort

1

Technisch ist die Antwort ja Sie können, aber der eigentliche Code für so tun ist zu lang für SO als das Verfahren zum so von Blob tun variiert je nach Bildtyp.

Der Bitcode-Header für die meisten Bilder speichert Dimensionen und von dort ist es eine einfache mathematische Frage, um den Aspekt zu bestimmen. Die Header, die dies aufzeichnen, sind wo jeder Typ unterschiedlich ist.

Wenn Sie sie in ein leeres dummy doc einfügen und getWidth und getHeight verwenden, ist das nicht schnell genug für Sie, dann wird die Benutzung von UrlFetch zu 3rd Party APIs auch langsam sein.

In diesem Fall empfehle ich Portierung image-size, die eine node.js-Bibliothek ist, in Ihre Apps-Skript oder vielleicht als separate Bibliothek. Die Knotenbibliothek enthält Funktionen zum Bearbeiten von Bildern in einem Stream. Sie können jedoch in der Innenstadt bohren, indem Sie die Methoden detect und calculate umschließen.

Verwandte Themen