Kermer

[3.0.6] Load image from remote server

Oct 22nd, 2018
608
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.55 KB | None | 0 0
  1. extends Node
  2.  
  3. var http = HTTPRequest.new()
  4. var response = null
  5.  
  6. onready var s = $"Sprite"
  7.  
  8. func _ready():
  9.     add_child(http)
  10.     http.connect("request_completed",self,"_request_completed")
  11.     var url = "http://cdn.shopify.com/s/files/1/0891/8314/products/Jihad_troll_face_4e2f3861ccffe_grande.jpeg?v=1459054285"
  12.     set_texture_from_http(url,s)
  13.  
  14. # Store response data
  15. func _request_completed(result, code, headers, body):
  16.     response = {"result":result, "code":code, "headers":headers, "body":body}
  17.  
  18. # Load JPEG or PNG texture from remote server and assign it to some sprite
  19. func set_texture_from_http(url, sprite):
  20.     var img
  21.     var tex
  22.     # Make request
  23.     http.request(url)
  24.     # Await completion
  25.     yield(http, "request_completed")
  26.     # Check Content-Type and create Image object
  27.     var content_type = get_content_type(response.headers)
  28.     if content_type == "image/jpeg":
  29.         img = Image.new()
  30.         img.load_jpg_from_buffer(response.body)
  31.     elif content_type == "image/png":
  32.         img = Image.new()
  33.         img.load_png_from_buffer(response.body)
  34.     else:
  35.         printerr("Unsupported Content-Type")
  36.    
  37.     if img == null:
  38.         printerr("Failed to download image. Content-Type: ", content_type)
  39.     else:
  40.         # Create texture and assign to Sprite
  41.         if sprite != null:
  42.             tex = ImageTexture.new()
  43.             tex.create_from_image(img)
  44.             sprite.texture = tex
  45.     response = null
  46.  
  47. # Retrieve Content-Type value from response headers
  48. func get_content_type(headers):
  49.     for header in headers:
  50.         if header.to_lower().begins_with("content-type"):
  51.             return header.split(":")[1].strip_edges().to_lower()
  52.     return null
Advertisement
Add Comment
Please, Sign In to add comment