首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java Graphics 繪圖輸出為 JPG 圖片教學

     編輯:程式設計疑難解答

需求說明

在 Java 圖形程式設計中,常需將 Graphics 或 Graphics2D 繪製的圖像儲存為 JPG 等常見圖片格式,以便後續查看、列印或網頁嵌入。

核心實作步驟

  1. 建立 BufferedImage 作為離屏繪圖緩衝區
  2. 取得其 Graphics2D 物件進行繪圖操作
  3. 使用 ImageIO.write() 輸出為 JPG 文件

完整程式碼範例

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class GraphicsToJpg {
    public static void main(String[] args) {
        int width = 800, height = 600;
        // 1. 建立支援透明度的 ARGB 圖像緩衝區
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2d = image.createGraphics();
        
        try {
            // 2. 開啟抗鋸齒提升畫質
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            
            // 3. 繪製背景
            g2d.setColor(Color.WHITE);
            g2d.fillRect(0, 0, width, height);
            
            // 4. 繪製範例圖形
            g2d.setColor(new Color(0x3498DB));
            g2d.fillRoundRect(100, 100, 200, 150, 20, 20);
            g2d.setColor(Color.BLACK);
            g2d.setFont(new Font("微軟正黑體", Font.BOLD, 32));
            g2d.drawString("Java 繪圖", 130, 200);
            
            // 5. 繪製座標軸
            g2d.setStroke(new BasicStroke(2f));
            g2d.setColor(Color.GRAY);
            g2d.drawLine(50, 500, 750, 500); // X 軸
            g2d.drawLine(50, 500, 50, 50);    // Y 軸
            
        } finally {
            // 6. 釋放 Graphics 資源
            g2d.dispose();
        }
        
        // 7. 輸出為 JPG(品質 0.9)
        File output = new File("output.jpg");
        try {
            // 需轉換為 TYPE_INT_RGB 去除 Alpha 通道,否則 JPG 會變黑底
            BufferedImage rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            rgbImage.createGraphics().drawImage(image, 0, 0, null);
            
            // 使用 JPEG 專用寫入參數控制品質
            ImageIO.write(rgbImage, "jpg", output);
            System.out.println("圖片已儲存至:" + output.getAbsolutePath());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

關鍵技術點解析

1. 圖像類型選擇

  • TYPE_INT_ARGB:繪圖時使用,支援透明度
  • TYPE_INT_RGB:輸出 JPG 前必須轉換,JPG 不支援 Alpha 通道

2. 品質控制進階用法

// 精確控制 JPEG 壓縮品質 (0.0f - 1.0f)
ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next();
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(0.9f); // 90% 品質

try (ImageOutputStream ios = ImageIO.createImageOutputStream(output)) {
    writer.setOutput(ios);
    writer.write(null, new IIOImage(rgbImage, null, null), param);
}

3. 常見坑點

  • 忘記呼叫 g2d.dispose() 導致資源洩漏
  • 直接寫入 ARGB 圖像產生全黑背景
  • 未處理 IOException 導致程式靜默失敗

應用場景延伸

  • 動態生成驗證碼圖片
  • 報表圖表伺服端渲染
  • 遊戲戰鬥回放縮圖生成
  • 科學計算視覺化結果匯出

掌握此技術後,即可將任何 Java 2D 繪圖結果持久化為標準圖片檔,滿足列印、歸檔、Web 傳輸等多元需求。

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