Martin j
Martin j

Reputation: 521

How to load an image in Unity from a link

I actually have done something to load the image :

urllll = "http://192.168.137.129/ooredoo/client_api/" + ConfirmPath;
WWW imgLink1 = new WWW (urllll);
img1 = imgLink1.texture;

EDIT: full code

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using ZXing;
using ZXing.Common;
using ZXing.QrCode;
using System.IO;
using UnityEngine.Events;
using LitJson;
using System.Data;
using Mono.Data.Sqlite;
using System.Linq;
using System.Collections.Generic;
using System;

public class ScreenSaverFromServer : MonoBehaviour
{

public Text Tester;
public int st = 0;
public int TimerFrAdd = 30;
public int OgTimerFrAdd;
public int ImageSize = 5;
public Image[] Imagez;
public Image Imag;
public int TimeToChangeImage = 10;
public int TimeToChangeVideo= 10;
public string imagePath = "Assets/Images/1K.png";
public Image photo;
public Texture2D img1;
public string urllll;
public string ConfirmPath;
public string[] paths = {"1","2","3","4","5","6","7","8","9","10"}; 
public string[] VedioPaths = { "Look at NEW Trump's 2-minute closing argument ad.mp4","The 2 minutes love story of TV Commercial for Canon 'You are my inspiration'.mp4"};
public string ConfirmPath1;
public  int PathNO1;
public int PathNO ;
public bool guitextureindi = true;
public Image guitextureindFrame;
public string screensavertype,ImageFrameIndic;

void Start () 
{
    OgTimerFrAdd = TimerFrAdd;
    Tester = GameObject.Find ("Tester").GetComponent<Text> ();
    InvokeRepeating("touches1", 1, 1);

    Imag = GameObject.Find("ImageFrame").GetComponent<Image>();

    Imag.enabled = false;

    screensavertype = PlayerPrefs.GetString ("screensavertype");
    ImageFrameIndic = PlayerPrefs.GetString ("screensaverActive");
}

void Update ()
{
    foreach (UnityEngine.Touch touch in Input.touches)
    {
        print ("touched");

        if (TimerFrAdd == 0) 
        {
            InvokeRepeating("touches1", 1, 1);
        }

        TimerFrAdd = OgTimerFrAdd;
        Imag.enabled = false;
    }

    if (guitextureindFrame.enabled) 
    {
        guitextureindi = true;
    }

    if(screensavertype == "0")
    {
        Imag.enabled = false;
    }
}

public void touches1()
{
    TimerFrAdd = TimerFrAdd - 1;
    Tester.text = TimerFrAdd.ToString ();
    if (TimerFrAdd == 0) 
    {
        if(ImageFrameIndic == "1")
        {
            Imag.enabled = true;
        }

        CancelInvoke (methodName : "touches1");

        string[] CallChange = {"ChangeImage","ChangeVideo" };
        System.Random random0 = new System.Random();
        int PathNO0 = random0.Next (CallChange.Length);
        string ConfirmPath0 =  CallChange[PathNO0];

        print (ConfirmPath0);

        InvokeRepeating ("ChangeImage", 1, TimeToChangeImage);
    }
}

public void ChangeImage()
{
    //System.Random random = new System.Random();
    //PathNO = random.Next (paths.Length);
    //ConfirmPath =  paths[PathNO];
    //photo.sprite =Resources.Load<Sprite>("Images/"+ConfirmPath) as Sprite ;
    print("aaaaaaaa");
    StartCoroutine (LoadImg1()); 
}


public void ChangeVideo()
{
    Imag.enabled = false;
    CancelInvoke (methodName : "ChangeImage");
    CancelInvoke (methodName : "touches1");
    CancelInvoke (methodName : "ChangeVideo");

    System.Random random1 = new System.Random();
    PathNO1 = random1.Next (VedioPaths.Length);
    ConfirmPath1 =  VedioPaths[PathNO1];
    Handheld.PlayFullScreenMovie (ConfirmPath1,Color.black, FullScreenMovieControlMode.CancelOnInput);

    if (TimerFrAdd == 0) 
    {
        InvokeRepeating("touches1", 1, 1);
        TimerFrAdd = OgTimerFrAdd;
    }
}

IEnumerator LoadImg1()
{
    yield return 0;

    //List<string> Items13 = new List<string> (ScreenSaverCodesApi.Items12);
    List<string> Items13 = ScreenSaverCodesApi.Items12;

    print("aaaaaaaa2222222");
    System.Random random1 = new System.Random();
    print("aaaaaaaa333333");
    int PathNO = Items13.Count;

    int num = UnityEngine.Random.Range(0,PathNO);
    print(num);

    foreach (string st in Items13) {
        print (st);
    }
    print ("path-----"+Items13[num]);
    string ConfirmPath =  Items13[num];
    print(ConfirmPath);
    print("aaaaaaaa555555");   
    urllll = "http://hcfhfch/nn/client_api/" + ConfirmPath; // test with an image link

    print("aaaaaaaa6666666");

    WWW imgLink1 = new WWW (urllll);
    print("aaaaaaaa777777");
    print (urllll);
    print("aaaaaaaa888888");
    yield return imgLink1;
    print("aaaaaaaa999999");

    img1 = imgLink1.texture;
}

void OnGUI()
{
    foreach (UnityEngine.Touch touch in Input.touches)
    {
        guitextureindi = false;
    }

    if (guitextureindi) 
    {
        GUILayout.Label (img1);
    }
}
}

Upvotes: 0

Views: 2340

Answers (1)

Programmer
Programmer

Reputation: 125455

You are downloading a texture and storing it in the img1 variable which is a type of a Texture2D. The Texture2D image is then displayed with GUILayout.Label in the OnGUI function. The problem is resizing the image...

Like I mentioned in your other post, do not use the OnGUI function. Do not use any Unity API that requires the OnGUI function unless you are making an Editor plugin.

In your function,

void OnGUI()
{
    foreach (UnityEngine.Touch touch in Input.touches)
    {
        guitextureindi = false;
    }

    if (guitextureindi) 
    {
        GUILayout.Label (img1);
    }
}

Pass the the width and length you want to the GUILayout.Label function.

For example:

public float textureWidth = 400;
public float textureHeight = 400;

public Texture2D img1;
void OnGUI()
{
    GUILayout.Label(img1, GUILayout.Width(textureWidth), GUILayout.Height(textureHeight));
}

The proper/correct way to display image in Unity:

With the Image Component:

public float textureWidth = 400;
public float textureHeight = 400;

public Texture2D img1;
public Image textureDisplayer;

void SomeFunction()
{
    textureDisplayer.sprite = Sprite.Create(img1, new Rect(0, 0, textureWidth, textureHeight), new Vector2());
}

With the RawImage Component:

public int textureWidth = 400;
public int textureHeight = 400;

public Texture2D img1;
public RawImage textureDisplayer;

void SomeFunction()
{
    img1.Resize(textureWidth, textureHeight);
    textureDisplayer.texture = img1;
}

You can also resize the Image or RawImage on the screen with:

textureDisplayer.GetComponent<RectTransform>().sizeDelta = new Vector2(textureWidth, textureHeight);

Simple download, resize and display Image Sample:

public int textureWidth = 400;
public int textureHeight = 400;

public RawImage textureDisplayer;

void Start()
{
    string imageUrl = "http://images.earthcam.com/ec_metros/ourcams/fridays.jpg";
    StartCoroutine(LoadImg(imageUrl));
}

void displayImage(Texture2D imgToDisp)
{
    //Resize Image
    textureDisplayer.GetComponent<RectTransform>().sizeDelta = new Vector2(textureWidth, textureHeight);
    textureDisplayer.texture = imgToDisp;
}


IEnumerator LoadImg(string url)
{
    yield return null;
    WWW www = new WWW(url);
    yield return www;

    displayImage(www.texture);
}

Upvotes: 1

Related Questions