2012-04-03 3 views
3

Die Funktion get_serving_url unterstützt derzeit keine unabhängige Größenanpassung der Bildbreite/-höhe, sondern erlaubt nur quadratische Größenanpassungen mit dem Parameter 'size'.Workaround für get_serving_url nicht unterstützt Breite/Höhe 'Größe' param?

http://code.google.com/p/googleappengine/issues/detail?id=4200

Kann jemand eine effiziente Abhilfe für dieses vorschlagen? Es scheint so, als würde man mit images.resize() vorgehen, aber müsste das transformierte Bild nicht im Blobstore gespeichert werden, um einen Blob_key für get_serving_url zu erhalten?

Hoffentlich gibt es eine Lösung, die effizient genug ist, um den Geschwindigkeitsvorteil der Verwendung des Blobstores nicht rückgängig zu machen!

Vielen Dank.

+0

Wahrscheinlich sollten Sie dieses Problem Stern als auch - http : //code.google.com/p/googleappengine/issues/detail? id = 4200 –

Antwort

4

was Sie tun müssen, ist die Berechnung der Proportionen des ursprünglichen Bildes, um es auf die gewünschte Breite und Höhe zu ändern, danach sollten Sie die berechnete Größe Wert an die bedienende URL übergeben und bekommen, was Sie wollen.

resolution = '1200x900' 
    blob_width, blob_height = resolution.split('x') 

    blob_width = float(blob_width) 
    blob_height = float(blob_height) 

    width = float(width) 
    height = float(height) 
    blob_prop = blob_width/blob_height 

    req_box_prop = width/height 

    if req_box_prop == blob_prop: 
     scale_factor = blob_width/width 
     serving_img_height = blob_width/scale_factor 
     serving_img_width = blob_height/scale_factor 

    if req_box_prop < blob_prop: 
     serving_img_width = width 
     serving_img_height = width/blob_prop 

    else: 
     serving_img_width = height * blob_prop 
     serving_img_height = height 


    serving_img_width = int(round(serving_img_width, 0)) 
    serving_img_height = int(round(serving_img_height, 0)) 

    # use serving urls 
    side = max(serving_img_width, serving_img_height) 

und Seite ist, was verwenden Sie für Ihre URL

'http://yourservingurl=s%s'%side

+0

Dies funktioniert einwandfrei. Vielen Dank! – Cerzi

4

https://code.google.com/p/googleappengine/issues/detail?id=4200#c18

Yay dienen!

Von der Post: „Es ist tatsächlich implementiert, aber ich habe es nicht überall dokumentiert:

  • Länge der längsten Dimension: = s180
  • Breite: = w200
  • Höhe: = h150
  • Breite und Höhe: = W200-H150
  • mit der Größe des Stutzens: = S200-c
  • mit der Breite/Höhe des Stutzens: = W200-h15 0-c
  • drehen: = r90
  • kombiniert Rotation: = w200-h150-r90-c

Hier ein Beispiel: http://lh4.ggpht.com/TgjDT-cPRr6bjrpSVQeILk93o4Ouzjo1ygMB6KpmnCHhyH5vJKKRrqxCD2bC3T09CRIP6h5QFsV_l0hnhio5bN7z=h200-w300-r180-c "

Verwandte Themen