UrlImageLoader.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System;
  2. using System.Drawing;
  3. using System.Drawing.Imaging;
  4. using System.IO;
  5. using System.Net;
  6. using System.Threading.Tasks;
  7. using UnityEngine;
  8. namespace ET
  9. {
  10. public class UrlImageLoader: Singleton<UrlImageLoader>//, ISingletonAwake
  11. {
  12. const string ImgPrefix = "omm_di_";
  13. private int FileIndex = 0;
  14. private string TmpImgFile(String url)
  15. {
  16. string ext = ".png";
  17. if (url.EndsWith(".jpg") || url.EndsWith(".png") || url.EndsWith(".gif"))
  18. {
  19. ext = url.Substring(url.Length - 4);
  20. }
  21. var file = ImgPrefix + (++FileIndex) + ext;
  22. return Path.Combine(Application.persistentDataPath, file);
  23. }
  24. public async Task<Texture2D> LoadImage(string url)
  25. {
  26. try
  27. {
  28. var imgFile = TmpImgFile(url);
  29. await new WebClient().DownloadFileTaskAsync(url, imgFile);
  30. var stream = new FileStream(imgFile, FileMode.Open, FileAccess.Read);
  31. Image img = Image.FromStream(stream);
  32. Texture2D tex = new Texture2D(img.Width, img.Height);
  33. img.Dispose();
  34. stream.Seek(0, SeekOrigin.Begin);
  35. var bytes = new Byte[stream.Length];
  36. stream.Read(bytes, 0, bytes.Length);
  37. ImageConversion.LoadImage(tex, bytes, false);
  38. stream.Close();
  39. return tex;
  40. }
  41. catch(Exception e)
  42. {
  43. Log.Error($"Load error: url\n" + e);
  44. }
  45. return null;
  46. }
  47. }
  48. }