java实现图片上插入文字并保存

这两天通过在网上查阅资料,了解了在图片上插入文字并保存的功能,下面记录一下。

工具类: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); // 添加字体的属性设置

  private Graphics2D g    = null;

  private int    fontsize = 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(Font font) {

    this.font = font;
  }

  /**
   * 修改图片,返回修改后的图片缓冲区(只输出一行文本)
   */
  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));//设置字体颜色
      g.setColor(color);//设置字体颜色
      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;
  }

  /**
   * 修改图片,返回修改后的图片缓冲区(只输出一行文本)
   *
   * 时间: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;
  }
  /***
   * 插入描边的字体
   * @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 = "岗位职责:"+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, "人数:"+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("造字工房力黑(非商用)常规体", 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);

    //公司简介,限定字数
    tt.setFont(new Font("黑体",Font.PLAIN, 30));
    String str = "功能:可以实现在图片模板上写内容并保存"+"功能:可以实现在图片模板上写内容并保存"+"功能:可以实现在图片模板上写内容并保存"
    +"功能:可以实现在图片模板上写内容并保存"+"功能:可以实现在图片模板上写内容并保存"+"功能:可以实现在图片模板上写内容并保存"+"功能:可以实现在图片模板上写内容并保存"+"功能:可以实现在图片模板上写内容并保存"
    +"功能:可以实现在图片模板上写内容并保存"+"功能:可以实现在图片模板上写内容并保存"+"功能:可以实现在图片模板上写内容并保存"+"功能:可以实现在图片模板上写内容并保存"+"功能:可以实现在图片模板上写内容并保存"
    +"功能:可以实现在图片模板上写内容并保存"+"功能:可以实现在图片模板上写内容并保存"+"功能:可以实现在图片模板上写内容并保存"+"功能:可以实现在图片模板上写内容并保存"+"功能:可以实现在图片模板上写内容并保存";
    System.out.println(str.length());
    //计算字符串长度
    int strleth=str.length();
    //计算循环次数
    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 = -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 = "岗位职责:"+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, "人数:"+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));
//    }

    // 联系方式和抵地址
    String name = "张先生";
    String tel = "12334343443";
    String company = "盐都区高新区振兴路汇鑫大厦";
    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]);
     }

 }
}

实现效果:模板图片为:1920 x 1080 px。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java 替换word文档文字并指定位置插入图片

    先说下 需要的依赖包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-excelant</artifactId> <version>3.12</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <arti

  • java实现图片上插入文字并保存

    这两天通过在网上查阅资料,了解了在图片上插入文字并保存的功能,下面记录一下. 工具类: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在图片上添加文字水印效果

    目录 前言 [1]获取原图片对象 (1.1)读取本地图片 (1.2)读取网络图片 [2]创建画笔 [3]添加文字水印 [4]获取处理图片 [5]源代码 总结 前言 今天分享一个:通过Java代码,给图片添加文字. 比如下面这个图片,我们在左下角就添加了一个文字版的水印,那么这是如何实现的呢 ? [1]获取原图片对象 首先,第一步,肯定是要让我们的程序,拿到需要处理的图片. 我们程序获取图片的方式,通常有两种,一种是通过下载到本地,从本地读取:另外一种就是通过网络地址进行获取. (1.1)读取本地

  • java实现图片上加文字水印(SpringMVC + Jsp)

    看之前要先对SpringMVC进行了解打好基础,下面直接先看效果图 代码编写 1.导入相关架包 2.配置文件 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee"

  • Java实现图片上传到服务器并把上传的图片读取出来

    在很多的网站都可以实现上传头像,可以选择自己喜欢的图片做头像,从本地上传,下次登录时可以直接显示出已经上传的头像,那么这个是如何实现的呢? 下面说一下我的实现过程(只是个人实现思路,实际网站怎么实现的不太清楚) 实现的思路: 工具:MySQL,eclipse 首先,在MySQL中创建了两个表,一个t_user表,用来存放用户名,密码等个人信息, 一个t_touxiang表,用来存放上传的图片在服务器中的存放路径,以及图片名字和用户ID, T_touxiang表中的用户ID对应了t_user中的i

  • 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

  • java web图片上传和文件上传实例详解

    java web图片上传和文件上传 图片上传和文件上传本质上是一样的,图片本身也是文件.文件上传就是将图片上传到服务器,方式虽然有很多,但底层的实现都是文件的读写操作. 注意事项 1.form表单一定要写属性enctype="multipart/form-data" 2.为了能保证文件能上传成功file控件的name属性值要和你提交的控制层变量名一致, 例如空间名是file那么你要在后台这样定义 private File file; //file控件名 private String f

  • Java实现图片上传至FastDFS入门教程

    今天来开始写图片上传的功能, 现在的图片上传都讲求 上传完成后立刻回显且页面不刷新, 这里到底是怎么做的呢? 当然是借助于ajax了, 但是ajax又不能提交表单, 这里我们还要借助一个插件: jquery.form.js 剩下的一个是FastDFS, 那么什么是FastDFS呢? FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker server).存储服务器(storage server)和客户端(client)三个部分组成,主要解决了海量数据存储问题,特别适合以中小

  • Java Struts图片上传至指定文件夹并显示图片功能

    继上一次利用Servlet实现图片上传,这次利用基于MVC的Struts框架,封装了Servlet并简化了JSP页面跳转. JSP上传页面 上传一定要为form加上enctype="multipart/form-data",表示提交的数据时二进制的 并且必须是method="post" <%@ page language="java" contentType="text/html; charset=utf-8" page

  • Android 使用Canvas在图片上绘制文字的方法

    [Android]Android中 Paint 字体.粗细等属性的一些设置 在Android SDK中使用Typeface类来定义字体,可以通过常用字体类型名称进行设置,如设置默认黑体: Paint mp = new paint(); mp.setTypeface(Typeface.DEFAULT_BOLD) 常用的字体类型名称还有: * Typeface.DEFAULT //常规字体类型 * Typeface.DEFAULT_BOLD //黑体字体类型 * Typeface.MONOSPACE

  • Java实现图片上传至服务器功能(FTP协议)

    本文为大家分享了java实现图片上传至服务器功能的具体代码,供大家参考,具体内容如下 本案例实现图片上传功能分为两个步骤,分别为 (1)APP用base64加密将图片内容上传至服务器(http协议),在临时目录中先存储好图片: (2)将服务器临时存储的图片用FTP协议上传至另一台专门用做存储图片的服务器: /** * ftp 文件操作服务实现类 * */ @Service public class FtpFileServiceImpl implements IFtpFileService { /

随机推荐