"Qu0ll" <Qu0llSixFour@gmail.com> wrote in message
news:4a3096a5$0$32375$5a62ac22@per-qv1-newsreader-01.iinet.net.au...
"Qu0ll" <Qu0llSixFour@gmail.com> wrote in message
news:4a309500$0$32382$5a62ac22@per-qv1-newsreader-01.iinet.net.au...
"Matt Humphrey" <matth@iviz.com> wrote in message
news:rNqdnXm47qnIX7LX4p2dnAA@giganews.com...
"Matt Humphrey" <matth@iviz.com> wrote in message
news:7IqdnUbpuNDkJbLX4p2dnAA@giganews.com...
There are image encoders for PNG, GIF, JPG, etc such as
http://www.acme.com/java/software/Acme.JPM.Encoders.GifEncoder.html
and I think some are actually built into Java now. These have
streaming methods which you can then use to create a byte array or
some other format, or to stream directly out of a servlet (see below).
One advantage of using a standard encoder is that you can just display
the image if you want to, without having to reinterpret it.
Here's a reference to some sample code. In a servlet they create a
BufferedImage, draw stuff to it and then direct it to the servlet
output via a JPEG encoder. Note the servlet response content type is
set to image/jpg.
http://javahowto.blogspot.com/2008/04/sample-servlet-that-dynamically-creates.html
Thank you Matt - that looks like the way to go and is probably what I
will use.
The only problem is that there appear to be no codecs for PNG or GIF - is
that correct? How would I handle those file types if required?
I'm using Java 1.6_04 under Eclipse 3.3.1 and it reports the following
built-in codecs:
jpg, BMP, bmp, JPG, jpeg, wbmp, png, JPEG, PNG, WBMP, GIF, gif
Java Image / IO docs are here
http://java.sun.com/j2se/1.4.2/docs/guide/imageio/spec/imageio_guideTOC.fm.html
Try this code to see what codecs are available on your system:
public static final void main (String [] args) {
try {
String [] formatNames = ImageIO.getWriterFormatNames();
if (formatNames.length == 0) {
System.out.println("No output formats available.");
return;
}
System.out.print ("Available formats: ");
for (int i = 0; i < formatNames.length; ++i) {
if (i > 0) System.out.print (", ");
System.out.print (formatNames[i]);
}
System.out.println ("");
BufferedImage image = new BufferedImage(300, 300,
BufferedImage.TYPE_BYTE_INDEXED);
Graphics graphics = image.getGraphics();
graphics.setColor(Color.blue);
graphics.fillRect(0, 0, image.getWidth(), image.getHeight());
graphics.setColor(Color.green);
graphics.fillRect(20, 60, 120, 170);
Iterator<ImageWriter> iws = ImageIO.getImageWritersByFormatName
("png");
if (! iws.hasNext()) {
System.out.println ("No available image writer");
}
ImageWriter iw = iws.next();
FileOutputStream fos = new FileOutputStream ("image1.png");
MemoryCacheImageOutputStream mos = new MemoryCacheImageOutputStream
(fos);
iw.setOutput(mos);
iw.write(image);
mos.close ();
} catch (Exception ex) {
ex.printStackTrace ();
}
System.out.println ("Done");
}
There are plenty of 3rd party encoders--there's probably a free one out
there GIYF.
Ah, thanks for that. I get the same list of codecs on Java 6 Update 14. I
class in ImageIO.