OK, so this is something of an odd request:
I have an application in which I want to, at runtime, dynamically replace an embedded image: <image xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJ.... I have a solution that works but is sub-optimal: I read the image I want to substitute, determine a content type for it, base-64 encode its data, and replace the xlink:href attribute of the image element. What this means is that I have at least two (usually three!) representations of the image data in-memory - even before a subsequent transcode operation! (That is, one in a ByteArrayOutputStream to accumulate the data, one in the byte[] that ByteArrayOutputStream returns, and a third in the base-64 encoded version of that byte[].) The subsequent transcode operation will necessarily base-64 decode the data I just encoded, create a bitmap out of it, and presumably blit the bits into the resulting JPG. This is far too many large data structures floating around! To reduce the count of large data structures, I really want to specify in the href element that the image data should come from some InputStream I have at hand. Then when Batik processes the image element, it reads the InputStream directly, and creates only the one or two copies of the image data it really truly needs. Is there a way to do this? If not, can someone point me in the right direction if I were to take this on on my own? -Adam Maass