wro4j-core/src/main/java/ro/isdc/wro/model/resource/processor/support/ImageUrlRewriter.java
public String rewrite(final String cssUri, final String imageUrl) {
    notNull(cssUri);
    notNull(imageUrl);
    if (StringUtils.isEmpty(imageUrl)) {
       return imageUrl;
    }
    if (ServletContextUriLocator.isValid(cssUri)) {
      if (ServletContextUriLocator.isValid(imageUrl)) {
        return prependContextPath(imageUrl);
      }
      // Treat WEB-INF special case
      if (ServletContextUriLocator.isProtectedResource(cssUri)) {
        return context.proxyPrefix + computeNewImageLocation(cssUri, imageUrl);
      }
      // Compute the folder where the final css is located. This is important for computing image location after url
      // rewriting.
      // Prefix of the path to the overwritten image url. This will be of the following type: "../" or "../.." depending
      // on the depth of the aggregatedFolderPath.
      final String aggregatedPathPrefix = computeAggregationPathPrefix(context.aggregatedFolderPath);
      LOG.debug("computed aggregatedPathPrefix {}", aggregatedPathPrefix);
      String newImageLocation = computeNewImageLocation(aggregatedPathPrefix + cssUri, imageUrl);
      if (newImageLocation.startsWith(ServletContextUriLocator.PREFIX)) {
        newImageLocation = prependContextPath(newImageLocation);
      }
      LOG.debug("newImageLocation: {}", newImageLocation);
      return newImageLocation;
    }
    if (ClasspathUriLocator.isValid(cssUri)) {
      final String proxyUrl = context.proxyPrefix + computeNewImageLocation(cssUri, imageUrl);
      final String contextRelativeUrl = prependContextPath(imageUrl);
      //final String contextRelativeUrl = context.contextPath + imageUrl;
      // leave imageUrl unchanged if it is a servlet context relative resource
      return (ServletContextUriLocator.isValid(imageUrl) ? contextRelativeUrl : proxyUrl);
    }
    if (UrlUriLocator.isValid(cssUri)) {
      final String computedCssUri = ServletContextUriLocator.isValid(imageUrl) ? computeCssUriForExternalServer(cssUri)
          : cssUri;
      return computeNewImageLocation(computedCssUri, imageUrl);
    }
    throw new WroRuntimeException("Could not replace imageUrl: " + imageUrl + ", contained at location: " + cssUri);
  }
public String rewrite(final String cssUri, final String imageUrl) {
    notNull(cssUri);
    notNull(imageUrl);
    if (StringUtils.isEmpty(imageUrl)) {
       return imageUrl;
    }
    if (ServletContextUriLocator.isValid(cssUri)) {
      if (ServletContextUriLocator.isValid(imageUrl)) {
        return prependContextPath(imageUrl);
      }
      // Treat WEB-INF special case
      if (ServletContextUriLocator.isProtectedResource(cssUri)) {
        return context.proxyPrefix + computeNewImageLocation(cssUri, imageUrl);
      }
      // Compute the folder where the final css is located. This is important for computing image location after url
      // rewriting.
      // Prefix of the path to the overwritten image url. This will be of the following type: "../" or "../.." depending
      // on the depth of the aggregatedFolderPath.
      final String aggregatedPathPrefix = computeAggregationPathPrefix(context.aggregatedFolderPath);
      LOG.debug("computed aggregatedPathPrefix {}", aggregatedPathPrefix);
      String newImageLocation = computeNewImageLocation(aggregatedPathPrefix + cssUri, imageUrl);
      if (newImageLocation.startsWith(ServletContextUriLocator.PREFIX)) {
        newImageLocation = prependContextPath(newImageLocation);
      }
      LOG.debug("newImageLocation: {}", newImageLocation);
      return newImageLocation;
    }
    if (ClasspathUriLocator.isValid(cssUri)) {
      final String proxyUrl = context.proxyPrefix + computeNewImageLocation(cssUri, imageUrl);
      final String contextRelativeUrl = prependContextPath(imageUrl);
      //final String contextRelativeUrl = context.contextPath + imageUrl;
      // leave imageUrl unchanged if it is a servlet context relative resource
      return (ServletContextUriLocator.isValid(imageUrl) ? contextRelativeUrl : proxyUrl);
    }
    if (UrlUriLocator.isValid(cssUri)) {
      final String computedCssUri = ServletContextUriLocator.isValid(imageUrl) ? computeCssUriForExternalServer(cssUri)
          : cssUri;
      return computeNewImageLocation(computedCssUri, imageUrl);
    }
    throw new WroRuntimeException("Could not replace imageUrl: " + imageUrl + ", contained at location: " + cssUri);
  }
Computes the url of the image to be replaced in a css resource.

@param cssUri
the uri of the css where the image is located.
@param imageUrl
the url of the image (relative or absolute).
@return replaced url of the image.