On the Fly Image Creation dengan Java
January 26, 2007
Java memiliki kemampuan untuk membuat citra (image) langsung dari objek-objek Java. Dengan objek Graphics2D, kita diberi fasilitas semacam kanvas yang bisa digambari bentuk, garis, titik, hingga huruf dengan font dan background yang kita inginkan. Pada kasus kali ini, kita akan mencoba membuat sebuah ImageGenerator yang akan menghasilkan citra PNG ke file.
Masalahnya di sini, objek Graphics maupun Graphics2D tidak dapat di-instansiasi langsung dengan operator new. Ia harus mengambil dari objek lain, biasanya adalah Canvas, atau Frame dari java.awt (Abstract Windowing Toolkit). Akan tetapi bagaimana jika aplikasi kita tidak akan melibatkan framing karena bukan aplikasi desktop? katakanlah aplikasi berbasis web atau servlet? Hehe.. inilah caranya!

Dari objek BufferedImage yang dapat diinstansiasi layaknya deklarasi sebuah kanvas dengan ukuran panjang kali lebar sekian piksel, kita bisa dapatkan objek Graphics2D yang dapat kita gambari bentuk-bentuk sesuka kita. Setelah selesai, serahkan pada objek ImageIO untuk menulisnya ke bentuk file. Semua method dari ImageIO adalah static sehingga bisa dipanggil kapan saja dan di mana saja tanpa instansiasi. Sayang, Java SDK 1.4.x tidak mendukung penulisan format GIF karena masalah lisensi, tapi mulai Java SDK 5 (code-named Tiger), penulisan format GIF sudah didukung.
Konsepnya secara garis besar seperti yang sudah kujelaskan di atas, contoh implementasi nyatanya di bawah ini (Maaf jika tidak terformat dengan baik, untuk pembacaan yang lebih baik, copy-paste aja ke suatu editor Java):
package galih.image;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;import javax.imageio.ImageIO;
public class ImageGenerator {
public ImageGenerator() {
try {
File f = new File(”E:/My Documents/test.png”);
createWellCaption( “BDK0020″, f );
}
catch(Exception e) {
e.printStackTrace();
}
}// returning an outputstream
public OutputStream createWellCaption( String wellName ) throws IOException {
// preparing output stream
OutputStream retval = null;
// preparing the canvas
BufferedImage img = new BufferedImage( 72, 19, BufferedImage.TYPE_3BYTE_BGR);
Graphics2D g = img.createGraphics();// draw white rectangle
g.setPaint(Color.white);
Rectangle2D.Double rect = new Rectangle2D.Double(0,0,72,19);
g.fill(rect);/* transparency — ImageIO’s PNG encoder renders as black */
/*
g.setComposite(AlphaComposite.Src);
g.setColor(new Color(0,0,0,0));
g.fillRect(0,0,72,19);
*/// create circle
Ellipse2D.Double circle = new Ellipse2D.Double(1, 1, 16, 16);// fill the circle
g.setPaint(new Color(34,24,75));
g.fill(circle);// draw the string
g.setFont(new Font(”Tahoma”, Font.BOLD, 11));
g.drawString( wellName, 19, 13);// using ImageIO’s PNG Encoder to write PNG Image
ImageIO.write( img, “png”, retval );return retval;
}// i create this method to test the code
public void createWellCaption( String wellName, File f ) throws IOException {
// preparing the canvas
BufferedImage img = new BufferedImage( 72, 19, BufferedImage.TYPE_3BYTE_BGR);
Graphics2D g = img.createGraphics();// draw white rectangle
g.setPaint(Color.white);
Rectangle2D.Double rect = new Rectangle2D.Double(0,0,72,19);
g.fill(rect);/* transparency — ImageIO’s PNG encoder renders as black */
/*
g.setComposite(AlphaComposite.Src);
g.setColor(new Color(0,0,0,0));
g.fillRect(0,0,72,19);
*/// create circle
Ellipse2D.Double circle = new Ellipse2D.Double(1, 1, 16, 16);// fill the circle
g.setPaint(new Color(34,24,75));
g.fill(circle);// draw the string
g.setFont(new Font(”Tahoma”, Font.BOLD, 11));
g.drawString( wellName, 19, 13);// using ImageIO’s PNG Encoder to write PNG Image
ImageIO.write( img, “png”, f );
}public static void main(String[] args) {
// TODO Auto-generated method stub
new ImageGenerator();
}}
Screenshot hasilnya seperti ini….

It’s so simple right? Yeah, because of this simplicity, I beleive in Java! (kembali ke.. LAPTOP!)
She’s gone,
Out of my life.
Oh, she’s gone.
I find it so hard to go on.
I really miss that girl, my love.She’s Gone — Steelheart
Posted in 












January 26th, 2007 at 1:40 pm
Blog bagus! Dibanyakin artikel Java-nya ya! Aku sedang seneng2nya belajar Java nih.
January 28th, 2007 at 9:25 pm
jadi pengin mrogram java lagi nih ..
kangen …
abis gara2 riset in jadi belajar C , TCL dan OTCL
January 29th, 2007 at 3:16 am
hiks, gak mudeng, Boz..
gaptek akut gw mah..
kapan-kapan ajarin gw dunk..
January 29th, 2007 at 12:30 pm
#Bu I’in:
Makan tuh TCL!!
#Arham:
Hehehe… bang Arham, selamat datang!
January 29th, 2007 at 2:04 pm
Lirik yang di bawah maksute opo?
skrinsyut juga tah???
January 29th, 2007 at 4:43 pm
#d-nial:
bukan… mirip-mirip dengan today’s emotion 