許多動態圖片範例基於 Servlet,部署繁瑣。若只需離線生成報表圖表、驗證碼、水印圖片,直接在命令列執行 java GenImage output.jpg 更簡單、可腳本化、易整合 CI/CD。
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics2D g = image.createGraphics();,呼叫 drawString、drawLine、fillRect 等繪圖 APIImageIO.write(image, "jpg", new File(path))(JDK 內建,無需 com.sun.image.codec.jpeg 專屬類)import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class CmdImageGen {
public static void main(String[] args) throws IOException {
if (args.length < 1) {
System.err.println("用法: java CmdImageGen <輸出路徑.jpg> [寬] [高]");
return;
}
int w = args.length > 1 ? Integer.parseInt(args[1]) : 400;
int h = args.length > 2 ? Integer.parseInt(args[2]) : 300;
String outPath = args[0];
// 1. 建立畫布
BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g = img.createGraphics();
// 2. 繪製:背景、文字、幾何圖形
g.setColor(Color.WHITE);
g.fillRect(0, 0, w, h);
g.setColor(Color.BLUE);
g.setFont(new Font("微軟正黑體", Font.BOLD, 24));
g.drawString("Hello Java 2D!", 50, 80);
g.setColor(Color.RED);
g.drawOval(100, 120, 150, 100);
g.fillRect(200, 200, 80, 50);
g.dispose(); // 釋放圖形資源
// 3. 輸出 JPG
File outFile = new File(outPath);
ImageIO.write(img, "jpg", outFile);
System.out.println("圖片已生成: " + outFile.getAbsolutePath());
}
}
javac CmdImageGen.java
java CmdImageGen demo.jpg 600 400
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);TYPE_INT_ARGB,搭配 g.setComposite(AlphaComposite.Clear).ttf:Font.createFont(Font.TRUETYPE_FONT, new File("msjh.ttf"))ImageWriteParam,ImageIO 預設約 0.75掌握 BufferedImage + ImageIO 組合,讓 Java 圖片生成脫離 Web 容器,輕鬆應用於批次處理、測試資料製造、自動化報表等場景。