首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

使用 Java Servlet 動態生成圖片 (JPEG)

     編輯:Java 程式設計入門

Web 應用常需動態產生圖表、驗證碼、即時圖形。Servlet 只需設定 Content-Type: image/jpeg,將 BufferedImage 繪製完成後經 JPEGImageEncoder 編碼輸出至 HttpServletResponse.getOutputStream(),瀏覽器即可直接顯示。

核心步驟

  1. 建立 BufferedImage 做為離屏緩衝區。
  2. 取得 Graphics2D 進行繪圖 (線條、文字、形狀)。
  3. 使用 com.sun.image.codec.jpeg.JPEGCodec 編碼為 JPEG。
  4. 輸出至 response.getOutputStream()。

完整 Servlet 範例

package com.crackj2ee.web.util;
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.sun.image.codec.jpeg.*;

public class CreateImageServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setContentType("image/jpeg");
        createImage(resp.getOutputStream());
    }

    private void createImage(OutputStream out) {
        int w = 100, h = 100;
        BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = bi.createGraphics();

        // 背景
        g.setBackground(Color.BLUE);
        g.clearRect(0, 0, w, h);
        // 前景
        g.setColor(Color.RED);
        g.drawLine(0, 0, 99, 99);

        g.dispose();
        bi.flush();

        // JPEG 編碼
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
        JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
        param.setQuality(1.0f, false);
        encoder.setJPEGEncodeParam(param);
        try { encoder.encode(bi); }
        catch (IOException ioe) { ioe.printStackTrace(); }
    }
}

部署與測試

  1. 編譯並註冊至 web.xml:<servlet-mapping><url-pattern>/CreateImage</url-pattern></servlet-mapping>。
  2. HTML 測試:<img src="CreateImage">。

注意:com.sun.image.codec.jpeg 為 JDK 內部 API,Java 9+ 已移除。現代專案建議使用 javax.imageio.ImageIO.write(bi, "jpg", out) 標準 API。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved