溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java中怎么在圖片中插入文字并保存

發(fā)布時間:2021-08-07 15:05:10 來源:億速云 閱讀:153 作者:Leah 欄目:編程語言

這篇文章給大家介紹java中怎么在圖片中插入文字并保存,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

工具類:PrintImage。

package com.learning.www.utils;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.RenderingHints;import java.awt.Shape;import java.awt.font.GlyphVector;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.net.URL; import javax.imageio.ImageIO; public class PrintImage {   private Font    font   = new Font("黑體", Font.PLAIN, 25); // 添加字體的屬性設(shè)置   private Graphics2D g    = null;   private int    fontsize = 0;   /**   * 導(dǎo)入本地圖片到緩沖區(qū)   */  public BufferedImage loadImageLocal(String imgName) {    try {      return ImageIO.read(new File(imgName));    } catch (IOException e) {      System.out.println(e.getMessage());    }    return null;  }   /**   * 導(dǎo)入網(wǎng)絡(luò)圖片到緩沖區(qū)   */  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());      }    }  }   /**   * 設(shè)定文字的字體等   */  public void setFont(Font font) {        this.font = font;  }   /**   * 修改圖片,返回修改后的圖片緩沖區(qū)(只輸出一行文本)   */  public BufferedImage modifyImage(BufferedImage img, Object content, int x, int y,Color color) {    try {      int w = img.getWidth();      int h = img.getHeight();      g = img.createGraphics();      g.setBackground(Color.BLUE);                  //g.setColor(new Color(120, 120, 110));//設(shè)置字體顏色      g.setColor(color);//設(shè)置字體顏色      g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);      g.setStroke(new BasicStroke(3));      if (this.font != null)        g.setFont(this.font);      if (content != null) {        g.translate(w / 2, h / 2);        //g.rotate(8 * Math.PI / 180);        g.drawString(content.toString(), x, y);      }      g.dispose();    } catch (Exception e) {      System.out.println(e.getMessage());    }     return img;  }     /**   * 修改圖片,返回修改后的圖片緩沖區(qū)(只輸出一行文本)   *   * 時間: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);//設(shè)置字體顏色      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;  }  /***   * 插入描邊的字體   * @param img   * @param content   * @param w   * @param h   * @return   */  public BufferedImage modifyShapImg(BufferedImage img, String content, int w, int h) {//    int w = img.getWidth();//    int h = img.getHeight();    g = img.createGraphics();       //Font f = new Font("Courier New", Font.BOLD, 140);    GlyphVector v = font.createGlyphVector(g.getFontMetrics(font).getFontRenderContext(), content);    Shape shape = v.getOutline();    if (content != null) {      g.translate(w, h);      //g.rotate(8 * Math.PI / 180);      //g.drawString(content.toString(), x, y);    }    g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);    g.setColor(new Color(0,90,160));    g.fill(shape);    g.setColor(new Color(248,248,255));    g.setStroke(new BasicStroke(2));    g.draw(shape);       return img;  } }

插入多條的格式相同的文字:

package com.learning.www.utils; import java.awt.Color;import java.awt.Font;import java.awt.image.BufferedImage; public class PrintJobToImg {  public static void printJobToImg(PrintImage tt,BufferedImage d,String job1,String need1,String amount1,String salary1,int y) {       if(null != job1 && !job1.equals("")) {   need1 = "崗位職責(zé):"+need1;   int strleth = need1.length()+5;   int num = strleth/40;   int subindex = 0;   int j = 40;   //y = -350;   String[] s1 = new String[num+1];   tt.setFont(new Font("黑體",Font.BOLD, 28));   tt.modifyImage(d, "職位:"+job1, -50, y, new Color(0,191,255));   tt.modifyImage(d, "人數(shù):"+amount1, -30+(30*(3+job1.length())), y, new Color(210,105,30));   tt.modifyImage(d, "月薪:"+salary1, -10+(30*(6+job1.length()+amount1.length())), y, new Color(178,34,34));   y = y+25;   tt.setFont(new Font("黑體",Font.PLAIN, 24));    if(num < 1 ) {     System.out.println(num);     tt.modifyImage(d, need1, -50, y+25,new Color(0,0,0));    }else {     for(int i = 0;i<num;i++) {     s1[i] = need1.substring(subindex, j);     tt.modifyImage(d, s1[i], -50, y,new Color(0,0,0));     subindex=j;     j+=40;     y+=25;     }     if(strleth%40 != 0) {     //System.out.println("不等于0");     s1[num] = need1.substring(num * 40);     tt.modifyImage(d, s1[num], -50, y,new Color(0,0,0));     }    }   //tt.modifyImage(d, "崗位要求:"+need1, -50, y+25, new Color(0,0,0));    }     } }

啟動類:

package com.learning.www; import java.awt.Color;import java.awt.Font;import java.awt.GraphicsEnvironment;import java.awt.image.BufferedImage; import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cache.annotation.EnableCaching; import com.learning.www.utils.PrintImage;import com.learning.www.utils.PrintJobToImg; @SpringBootApplication@EnableAutoConfiguration@EnableCaching@MapperScan("com.learning.www.mapper")public class LearningApplication {  public static void main(String[] args) { SpringApplication.run(LearningApplication.class, args);    PrintImage tt = new PrintImage();    BufferedImage d = tt.loadImageLocal("D:\\test\\muban.jpg");    String title = "撒大大是多少有限公司";    int x = title.length() * 96;    // 公司標題 72號字體==96px    tt.setFont(new Font("造字工房力黑(非商用)常規(guī)體", Font.BOLD, 76));    //tt.modifyImage(d, title, (1920-x)/2-960, -420, new Color(65,105,225));    //tt.modifyShapImg(d, title, (1920-x)/2-960, -420);    tt.modifyShapImg(d, title, (1920-x)/2, 130);        //公司簡介,限定字數(shù)    tt.setFont(new Font("黑體",Font.PLAIN, 30));    String str = "功能:可以實現(xiàn)在圖片模板上寫內(nèi)容并保存"+"功能:可以實現(xiàn)在圖片模板上寫內(nèi)容并保存"+"功能:可以實現(xiàn)在圖片模板上寫內(nèi)容并保存"    +"功能:可以實現(xiàn)在圖片模板上寫內(nèi)容并保存"+"功能:可以實現(xiàn)在圖片模板上寫內(nèi)容并保存"+"功能:可以實現(xiàn)在圖片模板上寫內(nèi)容并保存"+"功能:可以實現(xiàn)在圖片模板上寫內(nèi)容并保存"+"功能:可以實現(xiàn)在圖片模板上寫內(nèi)容并保存"    +"功能:可以實現(xiàn)在圖片模板上寫內(nèi)容并保存"+"功能:可以實現(xiàn)在圖片模板上寫內(nèi)容并保存"+"功能:可以實現(xiàn)在圖片模板上寫內(nèi)容并保存"+"功能:可以實現(xiàn)在圖片模板上寫內(nèi)容并保存"+"功能:可以實現(xiàn)在圖片模板上寫內(nèi)容并保存"    +"功能:可以實現(xiàn)在圖片模板上寫內(nèi)容并保存"+"功能:可以實現(xiàn)在圖片模板上寫內(nèi)容并保存"+"功能:可以實現(xiàn)在圖片模板上寫內(nèi)容并保存"+"功能:可以實現(xiàn)在圖片模板上寫內(nèi)容并保存"+"功能:可以實現(xiàn)在圖片模板上寫內(nèi)容并保存";    System.out.println(str.length());    //計算字符串長度    int strleth=str.length();    //計算循環(huán)次數(shù)    int num = strleth/20;    //字符串截取第一位    int subindex = 0;    //字符串截取第二位    int j = 20;    //距離y軸的位置    int y = -350;    String[] s = new String[num+1];    if(num < 1 ) {    System.out.println(num);    tt.modifyImage(d, str, -830, y,new Color(0,0,0));    }else {    for(int i = 0;i<num;i++) {     s[i] = str.substring(subindex, j);     tt.modifyImage(d, s[i], -830, y,new Color(0,0,0));     subindex=j;     j+=20;     y+=35;    }    if(strleth%20 != 0) {     //System.out.println("不等于0");     s[num] = str.substring(num * 20);     tt.modifyImage(d, s[num], -830, y,new Color(0,0,0));    }    }    // 公司崗位6個    String job1 = "普工";    String amount1 = "3人";    String salary1 = "4000元/月";    String need1 = "吃苦耐勞,具有專業(yè)的技術(shù)能力。吃苦耐勞,具有專業(yè)的技術(shù)能力。吃苦耐勞,具有專業(yè)的技術(shù)能力。吃苦耐勞,具有專業(yè)的技術(shù)能力。吃苦耐勞,具有專業(yè)的技術(shù)能力。"     + "吃苦耐勞,具有專業(yè)的技術(shù)能力。";    y = -350;    PrintJobToImg.printJobToImg(tt, d, job1, need1, amount1, salary1, y);    PrintJobToImg.printJobToImg(tt, d, job1, need1, amount1, salary1, y+110);    PrintJobToImg.printJobToImg(tt, d, job1, need1, amount1, salary1, y+220);    PrintJobToImg.printJobToImg(tt, d, job1, need1, amount1, salary1, y+330);    PrintJobToImg.printJobToImg(tt, d, job1, need1, amount1, salary1, y+440);    PrintJobToImg.printJobToImg(tt, d, job1, need1, amount1, salary1, y+550);//    tt.setFont(new Font("黑體",Font.PLAIN, 24));//    if(null != job1 && !job1.equals("")) {//   need1 = "崗位職責(zé):"+need1;//   strleth = need1.length()+5;//   num = strleth/40;//   subindex = 0;//   j = 40;//   y = -350;//   String[] s1 = new String[num+1];//   tt.modifyImage(d, "職位:"+job1, -50, y, new Color(0,191,255));//   tt.modifyImage(d, "人數(shù):"+amount1, -30+(30*(3+job1.length())), y, new Color(210,105,30));//   tt.modifyImage(d, "月薪:"+salary1, -10+(30*(6+job1.length()+amount1.length())), y, new Color(178,34,34));//   y = y+25;//    if(num < 1 ) {//     System.out.println(num);//     tt.modifyImage(d, need1, -50, y+25,new Color(0,0,0));//    }else {//     for(int i = 0;i<num;i++) {//     s1[i] = need1.substring(subindex, j);//     tt.modifyImage(d, s1[i], -50, y,new Color(0,0,0));//     subindex=j;//     j+=40;//     y+=25;//     }//     if(strleth%40 != 0) {//     //System.out.println("不等于0");//     s1[num] = need1.substring(num * 40);//     tt.modifyImage(d, s1[num], -50, y,new Color(0,0,0));//     }//    }//   //tt.modifyImage(d, "崗位要求:"+need1, -50, y+25, new Color(0,0,0));//    }        // 聯(lián)系方式和抵地址    String name = "張先生";    String tel = "12334343443";    String company = "鹽都區(qū)高新區(qū)振興路匯鑫大廈";    tt.setFont(new Font("黑體",Font.BOLD, 40));    tt.modifyImage(d, name, -650, 360,new Color(0,0,0));    tt.modifyImage(d, tel, -450, 360,new Color(0,0,0));    tt.modifyImage(d, company, -650, 440,new Color(0,0,0));            //tt.modifyImage(d, str, -830, -100);    tt.writeImageLocal("D:\\test\\cc.jpg", d);    System.out.println("success");    System.out.println(s[0]);    System.out.println(s[0].length());         GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();     String[] fontList = ge.getAvailableFontFamilyNames();     for(int i=0;i<fontList.length;i++)     {        System.out.println("字體:"+fontList[i]);     }  }}

關(guān)于java中怎么在圖片中插入文字并保存就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI