Advertisement
Guest User

Untitled

a guest
Apr 13th, 2015
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.83 KB | None | 0 0
  1. from PIL import Image
  2. from PIL.ImageColor import getcolor, getrgb
  3. from PIL.ImageOps import grayscale
  4. import time
  5. import objgraph
  6. import gc
  7.  
  8. def memory_usage_psutil():
  9. # return the memory usage in MB
  10. import psutil
  11. import os
  12. process = psutil.Process(os.getpid())
  13. mem = process.get_memory_info()[0] / float(2 ** 20)
  14. mem = round(mem,3)
  15. print(mem)
  16.  
  17. for i in range(1,40):
  18. time.sleep(0.2)
  19. def image_tint(src, tint='#ffffff'):
  20. memory_usage_psutil()
  21. print("----2----")
  22. if Image.isStringType(src): # file path?
  23. src = Image.open(src)
  24. if src.mode not in ('RGB', 'RGBA'):
  25. raise TypeError('Unsupported source image mode: {}'.format(src.mode))
  26. src.load()
  27.  
  28. tr, tg, tb = getrgb(tint)
  29. tl = getcolor(tint, "L") # tint color's overall luminosity
  30. if not tl: tl = 1 # avoid division by zero
  31. tl = float(tl) # compute luminosity preserving tint factors
  32. sr, sg, sb = map(lambda tv: tv/tl, (tr, tg, tb)) # per component
  33. # adjustments
  34. memory_usage_psutil()
  35. print("------2.5----")
  36. # create look-up tables to map luminosity to adjusted tint
  37. # (using floating-point math only to compute table)
  38. luts = (tuple(map(lambda lr: int(lr*sr + 0.5), range(256))) +
  39. tuple(map(lambda lg: int(lg*sg + 0.5), range(256))) +
  40. tuple(map(lambda lb: int(lb*sb + 0.5), range(256))))
  41. memory_usage_psutil()
  42. print("------3----")
  43. l = grayscale(src) # 8-bit luminosity version of whole image
  44. if Image.getmodebands(src.mode) < 4:
  45. merge_args = (src.mode, (l, l, l)) # for RGB verion of grayscale
  46. else: # include copy of src image's alpha layer
  47. a = Image.new("L", src.size)
  48. a.putdata(src.getdata(3))
  49. merge_args = (src.mode, (l, l, l, a)) # for RGBA verion of grayscale
  50. luts += tuple(range(256)) # for 1:1 mapping of copied alpha values
  51. potato = Image.merge(*merge_args).point(luts)
  52. src.close()
  53. memory_usage_psutil()
  54. print("----4----")
  55. return potato
  56.  
  57.  
  58. if __name__ == '__main__':
  59. memory_usage_psutil()
  60. print("---1---")
  61. import os
  62.  
  63. input_image_path = 'headbase.png'
  64.  
  65. root, ext = os.path.splitext(input_image_path)
  66. result_image_path = root+'_result_py3'+ext
  67.  
  68. result = image_tint(input_image_path, '#383D2D')
  69. if os.path.exists(result_image_path): # delete any previous result file
  70. os.remove(result_image_path)
  71. result.save(result_image_path) # file name's extension determines format
  72. gc.collect()
  73. memory_usage_psutil()
  74. print("---5---")
  75. input("test")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement