Java 在圖片上寫文字和圖片

寫文字之前.png

寫文字之后.png

import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageDecoder;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

import javax.imageio.ImageIO;
import javax.swing.;
import java.awt.
;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.*;

public class MainIn {

static String picturePath;
static String pictureInName = "/bg.jpeg";
static String pictureOutName = "/bg_out.jpeg";


public static void main(String[] args) {
    String _dir = System.getProperty("user.dir");
    picturePath = _dir + File.separator + "src" + File.separator;

// exportImg1();
drawTextToPicture("我好,中國", picturePath + "/head_img.png");
}

///在圖片上畫文字
public static void drawTextToPicture(String username, String headImg) {
    try {
        //1.jpg是你的 主圖片的路徑
        InputStream is = new FileInputStream(picturePath + pictureInName);


        //通過JPEG圖象流創(chuàng)建JPEG數(shù)據(jù)流解碼器
        JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(is);
        //解碼當前JPEG數(shù)據(jù)流药有,返回BufferedImage對象
        BufferedImage buffImg = jpegDecoder.decodeAsBufferedImage();
        //得到畫筆對象
        Graphics g = buffImg.getGraphics();

        //創(chuàng)建你要附加的圖象城榛。
        //小圖片的路徑
        ImageIcon imgIcon = new ImageIcon(headImg);

        //得到Image對象漾岳。
        Image img = imgIcon.getImage();

        //將小圖片繪到大圖片上。
        //5,300 .表示你的小圖片在大圖片上的位置搪搏。
        g.drawImage(img, 400, 15, null);

        //設置顏色。
        g.setColor(Color.BLACK);


        //最后一個參數(shù)用來設置字體的大小
        Font f = new Font("宋體", Font.PLAIN, 25);
        Color mycolor = Color.red;//new Color(0, 0, 255);
        g.setColor(mycolor);
        g.setFont(f);

        //10,20 表示這段文字在圖片上的位置(x,y) .第一個是你設置的內(nèi)容瘪撇。
        g.drawString(username, 100, 135);

        g.dispose();
        OutputStream os;

        os = new FileOutputStream(picturePath + pictureOutName);
        //創(chuàng)鍵編碼器堡赔,用于編碼內(nèi)存中的圖象數(shù)據(jù)。
        JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(os);
        en.encode(buffImg);

        is.close();
        os.close();
    } catch (ImageFormatException | IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

///創(chuàng)建一個文本畫布
public static void createTextCanvas() {
    int width = 100;
    int height = 100;
    String s = "你好";

    File file = new File(picturePath + pictureInName);
    Font font = new Font("Serif", Font.BOLD, 10);
    BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = (Graphics2D) bi.getGraphics();
    g2.setBackground(Color.WHITE);
    g2.clearRect(0, 0, width, height);
    g2.setPaint(Color.RED);

    FontRenderContext context = g2.getFontRenderContext();
    Rectangle2D bounds = font.getStringBounds(s, context);
    double x = (width - bounds.getWidth()) / 2;
    double y = (height - bounds.getHeight()) / 2;
    double ascent = -bounds.getY();
    double baseY = y + ascent;

    g2.drawString(s, (int) x, (int) baseY);

    try {
        ImageIO.write(bi, "jpg", file);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}


2021年01月15日13:29:09更新
 文字增加抗鋸齒, 文本x  y 坐標校準
~~~



    ///在圖片上畫文字
    public static void drawTextToPicture(List<DetailCoordinate> _detailList) {
        try {

            BufferedImage _mainImage = getImage(picturePath + pictureInName);
            SunGraphics2D g = (SunGraphics2D) _mainImage.getGraphics();

            g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);

            OutputStream os = new FileOutputStream(picturePath + pictureOutName);
            for (DetailCoordinate itemCoordinate : _detailList) {
                if (itemCoordinate.type == 0) {
                    //最后一個參數(shù)用來設置字體的大小
                    Font f = new Font(Font.SERIF, Font.PLAIN, itemCoordinate.size);
                    Color myColor = fromStrToARGB(itemCoordinate.getColor());//new Color(0, 0, 255);
                    g.setColor(myColor);
                    g.setFont(f);

                    FontMetrics fm = g.getFontMetrics();
                    g.drawString(itemCoordinate.txt, itemCoordinate.x, fm.getMaxAscent() + itemCoordinate.y);
                } else if (itemCoordinate.type == 1) {
                    //創(chuàng)建你要附加的圖象甸祭。
                    //小圖片的路徑
                    ImageIcon imgIcon = new ImageIcon(itemCoordinate.txt);

                    //得到Image對象缕碎。
                    Image img = imgIcon.getImage();

                    //將小圖片繪到大圖片上。
                    //5,300 .表示你的小圖片在大圖片上的位置池户。
                    g.drawImage(img, itemCoordinate.x, itemCoordinate.y, null);

                    //設置顏色咏雌。
                    g.setColor(Color.BLACK);
                }
            }
            g.dispose();
            _mainImage.flush();

            ImageIO.write(_mainImage, "png", os);
        } catch (ImageFormatException | IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凡怎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子处嫌,更是在濱河造成了極大的恐慌栅贴,老刑警劉巖斟湃,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熏迹,死亡現(xiàn)場離奇詭異,居然都是意外死亡凝赛,警方通過查閱死者的電腦和手機注暗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來墓猎,“玉大人捆昏,你說我怎么就攤上這事”姓矗” “怎么了骗卜?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長左胞。 經(jīng)常有香客問我寇仓,道長,這世上最難降的妖魔是什么烤宙? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任遍烦,我火速辦了婚禮,結(jié)果婚禮上躺枕,老公的妹妹穿的比我還像新娘服猪。我一直安慰自己,他們只是感情好拐云,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布罢猪。 她就那樣靜靜地躺著,像睡著了一般叉瘩。 火紅的嫁衣襯著肌膚如雪膳帕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天房揭,我揣著相機與錄音备闲,去河邊找鬼。 笑死捅暴,一個胖子當著我的面吹牛恬砂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蓬痒,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼泻骤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起狱掂,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤演痒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后趋惨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸟顺,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年器虾,在試婚紗的時候發(fā)現(xiàn)自己被綠了讯嫂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡兆沙,死狀恐怖欧芽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情葛圃,我是刑警寧澤千扔,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站库正,受9級特大地震影響曲楚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诀诊,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一洞渤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧属瓣,春花似錦载迄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至粗截,卻和暖如春惋耙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背熊昌。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工绽榛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人婿屹。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓灭美,卻偏偏與公主長得像,于是被迫代替她去往敵國和親昂利。 傳聞我的和親對象是個殘疾皇子届腐,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容