<%@ page language="java"
pageEncoding="GB2312"
contentType="text/html; charset=GB2312"
import="java.awt.*,
java.awt.image.*,
javax.swing.*,
com.sun.image.codec.jpeg.*,
javax.imageio.*"
%>
<html>
<head>
<title>我的圖畫</title>
</head>
<body>
<%
System.out.println("----------");
int width=400,height=400;
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.setColor(Color.WHITE);
g.fillRect(0,0,width,height);
g.setColor(Color.BLACK);
g.drawString("交通工具使用率",10,10);
g.setColor(Color.RED);
//填充圖形
g.fillRect(30,30,100,20);
g.setColor(Color.BLACK);
//畫邊框
g.drawRect(30,30,100,20);
//寫字
g.drawString("飛機",135,45);
g.setColor(Color.BLUE);
g.fillRect(30,55,120,20);
g.setColor(Color.BLACK);
g.drawRect(30,55,120,20);
g.drawString("火車",155,70);
g.setColor(Color.YELLOW);
g.fillRect(30,80,90,20);
g.setColor(Color.BLACK);
g.drawRect(30,80,90,20);
g.drawString("輪船",125,95);
/**
這種方式也可以輸出,在jdk1.3中常常使用
// 將ContentType設為"image/jpeg", 以讓瀏覽器識別映像格式。
// response.setContentType("image/jpeg");
// 建立JPEG映像編碼器,將BufferedImage編碼成jpeg格式輸出到response的輸出資料流。
// JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream());
// JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);
// param.setQuality(1.0F, true);
// encoder.encode(image, param);
**/
/**
在jdk1.4開始,引入了一個新的imageio庫,提供了一個新的工具類ImageIO來進行映像的輸出和輸出操作。使用ImageIO進行映像的輸 出操作,可使代碼更加簡潔,如下:
**/
// 關閉緩衝(預設情況下是開啟的)。在實際應用中我們發現,
// 如果不關閉緩衝,在IE5.5上可能無法正常運行本程式。
// 而IE5.0和IE6.0則不會有問題。
ImageIO.setUseCache(false);
// 將映像以jpg格式寫入到輸出資料流。
ImageIO.write(image, "jpg", response.getOutputStream());
/**
從資料庫取得圖片並在上面加浮水印字
一般我們將圖片以二進位格式存在資料庫中。藉助ImageIO的read方法,我們可以直接將資料庫中的圖片產生BufferedImage.
// 這裡我們假設在資料庫表tabimage中有一個myimage欄位存放有圖片。
PreparedStatement ps = conn.prepareStatement("SELECT myimage FROM tblimage WHERE id=119");
ResultSet rs = ps.executeQuery();
InputStream data = null;
if (rs.next())
{
// 取得圖片的輸入資料流
data = rs.getBinaryStream("signet");
}
rs.close();
ps.close();
if (data == null) {
conn.close();
return null;
}
ImageIO.setUseCache(false);
// 將圖片讀入到BufferedImage對象中。
BufferedImage image = ImageIO.read(data);
conn.close();
// 取得映像的graphics對象,
Graphics graphics = image.createGraphics()
// 通過graphics對象在圖片上寫上文字
graphics.drawString("Hello World!",10,10);
餘下的代碼就是將映像輸出,請參考前面的例子。由於這個例子涉及到資料庫的操作,無法給出完整的例子。
製作縮圖
在很多線上購物的網站,通常將商品的介紹圖片以縮圖的形式顯示在商品目錄清單中,使用者點擊縮圖後再彈出商品的詳細內容及 原始圖片。
所謂縮圖就是將原圖以一定比例縮小。同樣,藉助ImageIO, 我們先從資料庫(或檔案)讀入一個圖片(參考上面的例子),
//產生縮圖
// 讀入原始圖的image對象
InputStream inputstream = new FileInputStream("E://tomcat5//webapps//testset//web.gif");
BufferedImage src = ImageIO.read(inputstream);
// 得到原圖的寬度和高度
int wideth=src.getWidth();
int height=src.getHeight();
// 產生原圖1/2大小的記憶體配置圖像,你也可以指定固定大小
BufferedImage taget = new BufferedImage(wideth/2,height/2,BufferedImage.TYPE_INT_RGB);
// 將原圖繪製在縮小後的記憶體配置圖像上
taget.getGraphics().drawImage(src,0,0,wideth/2,height/2,null);
ImageIO.setUseCache(false);
ImageIO.write(taget, "jpg", response.getOutputStream());
%>
</body>
</html>