Java在圖片上寫字,兩個圖片合并的方法

jopen 11年前發布 | 43K 次閱讀 Java圖片 Java開發

package writeimg;
import javax.imageio.ImageIO;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;

public class pic {

private Font font = new Font("華文彩云", Font.PLAIN, 40);// 添加字體的屬性設置

private Graphics2D g = null;

private int fontsize = 0;

private int x = 0;

private int y = 0;

/**
 * 導入本地圖片到緩沖區
 */
public BufferedImage loadImageLocal(String imgName) {
    try {
        return ImageIO.read(new File(imgName));
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
    return null;
}

/**
 * 導入網絡圖片到緩沖區
 */
public BufferedImage loadImageUrl(String imgName) {
    try {
        URL url = new URL(imgName);
        return ImageIO.read(url);
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
    return null;
}

/**
 * 生成新圖片到本地
 */
public void writeImageLocal(String newImage, BufferedImage img) {
    if (newImage != null && img != null) {
        try {
            File outputfile = new File(newImage);
            ImageIO.write(img, "jpg", outputfile);
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }
}

/**
 * 設定文字的字體等
 */
public void setFont(String fontStyle, int fontSize) {
    this.fontsize = fontSize;
    this.font = new Font(fontStyle, Font.PLAIN, fontSize);
}

/**
 * 修改圖片,返回修改后的圖片緩沖區(只輸出一行文本)
 */
public BufferedImage modifyImage(BufferedImage img, Object content, int x,
        int y) {

    try {
        int w = img.getWidth();
        int h = img.getHeight();
        g = img.createGraphics();
        g.setBackground(Color.WHITE);
        g.setColor(Color.orange);//設置字體顏色
        if (this.font != null)
            g.setFont(this.font);
        // 驗證輸出位置的縱坐標和橫坐標
        if (x >= h || y >= w) {
            this.x = h - this.fontsize + 2;
            this.y = w;
        } else {
            this.x = x;
            this.y = y;
        }
        if (content != null) {
            g.drawString(content.toString(), this.x, this.y);
        }
        g.dispose();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }

    return img;
}

/**
 * 修改圖片,返回修改后的圖片緩沖區(輸出多個文本段) xory:true表示將內容在一行中輸出;false表示將內容多行輸出
 */
public BufferedImage modifyImage(BufferedImage img, Object[] contentArr,
        int x, int y, boolean xory) {
    try {
        int w = img.getWidth();
        int h = img.getHeight();
        g = img.createGraphics();
        g.setBackground(Color.WHITE);
        g.setColor(Color.RED);
        if (this.font != null)
            g.setFont(this.font);
        // 驗證輸出位置的縱坐標和橫坐標
        if (x >= h || y >= w) {
            this.x = h - this.fontsize + 2;
            this.y = w;
        } else {
            this.x = x;
            this.y = y;
        }
        if (contentArr != null) {
            int arrlen = contentArr.length;
            if (xory) {
                for (int i = 0; i < arrlen; i++) {
                    g.drawString(contentArr[i].toString(), this.x, this.y);
                    this.x += contentArr[i].toString().length()
                            * this.fontsize / 2 + 5;// 重新計算文本輸出位置
                }
            } else {
                for (int i = 0; i < arrlen; i++) {
                    g.drawString(contentArr[i].toString(), this.x, this.y);
                    this.y += this.fontsize + 2;// 重新計算文本輸出位置
                }
            }
        }
        g.dispose();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }

    return img;
}

/**
 * 修改圖片,返回修改后的圖片緩沖區(只輸出一行文本)
 * 
 * 時間:2007-10-8
 * 
 * @param img
 * @return
 */
public BufferedImage modifyImageYe(BufferedImage img) {

    try {
        int w = img.getWidth();
        int h = img.getHeight();
        g = img.createGraphics();
        g.setBackground(Color.WHITE);
        g.setColor(Color.blue);//設置字體顏色
        if (this.font != null)
            g.setFont(this.font);
        g.drawString("www.hi.baidu.com?xia_mingjian", w - 85, h - 5);
        g.dispose();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }

    return img;
}

public BufferedImage modifyImagetogeter(BufferedImage b, BufferedImage d) {

    try {
        int w = b.getWidth();
        int h = b.getHeight();


        g = d.createGraphics();
        g.drawImage(b, 100, 10, w, h, null);
        g.dispose();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }

    return d;
}

public static void main(String[] args) {

    pic tt = new pic();

    BufferedImage d = tt.loadImageLocal("D:\\11.jpg");

// BufferedImage b = tt // .loadImageLocal("E:\文件(word,excel,pdf,ppt.txt)\zte-logo.png"); tt.writeImageLocal("D:\cc.jpg",tt.modifyImage(d,"曹原",90,90) //往圖片上寫文件 );

    //tt.writeImageLocal("D:\\cc.jpg", tt.modifyImagetogeter(b, d));
    //將多張圖片合在一起
    System.out.println("success");
}

}</pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!