code: def _image_url(image, dst_color=None, src_color=None):
      if src_color and dst_color:
          if not Image:
              raise Exception("Images manipulation require PIL")
      file = StringValue(image).value
      path = None
      if callable(STATIC_ROOT):
          try:
              _file, _storage = list(STATIC_ROOT(file))[0]
              d_obj = _storage.modified_time(_file)
              filetime = int(time.mktime(d_obj.timetuple()))
              if dst_color:
                  path = _storage.open(_file)
          except:
              filetime = 'NA'
      else:
          _path = os.path.join(STATIC_ROOT, file)
          if os.path.exists(_path):
              filetime = int(os.path.getmtime(_path))
              if dst_color:
                  path = open(_path, 'rb')
          else:
              filetime = 'NA'
      BASE_URL = STATIC_URL
      if path:
          src_color = tuple(int(round(c)) for c in ColorValue(
              src_color).value[:3]) if src_color else (0, 0, 0)
          dst_color = [int(round(c)) for c in ColorValue(dst_color).value[:3]]
          file_name, file_ext = os.path.splitext(
              os.path.normpath(file).replace('\\', '_').replace('/', '_'))
          key = (filetime, src_color, dst_color)
          key = file_name + '-' + base64.urlsafe_b64encode(
              hashlib.md5(repr(key)).digest()).rstrip('=').replace('-', '_')
          asset_file = key + file_ext
          asset_path = os.path.join(ASSETS_ROOT, asset_file)
          if os.path.exists(asset_path):
              file = asset_file
              BASE_URL = ASSETS_URL
              filetime = int(os.path.getmtime(asset_path))
          else:
              image = Image.open(path)
              image = image.convert("RGBA")
              pixdata = image.load()
              for y in xrange(image.size[1]):
                  for x in xrange(image.size[0]):
                      if pixdata[x, y][:3] == src_color:
                          new_color = tuple(dst_color + [pixdata[x, y][3]])
                          pixdata[x, y] = new_color
              try:
                  image.save(asset_path)
                  file = asset_file
                  BASE_URL = ASSETS_URL
              except IOError:
                  log.exception("Error while saving image")
      url = 'url("%s%s?_=%s")' % (BASE_URL, file, filetime)
      return StringValue(url)