java中的接口是类吗
321
2023-01-04
java实现图片上插入文字并保存
这两天通过在网上查阅资料,了解了在图片上插入文字并保存的功能,下面记录一下。
工具类:PrintImage。
package com.learning.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("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.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 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.utils.PrintImage; import com.learning.utils.PrintJobToImg; @SpringBootApplication @EnableAutoConfiguration @EnableCaching @MapperScan("com.learning.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 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 // 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 { System.out.println("字体:"+fontList[i]); } } } 实现效果:模板图片为:1920 x 1080 px。
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.utils.PrintImage;
import com.learning.utils.PrintJobToImg;
@SpringBootApplication
@EnableAutoConfiguration
@EnableCaching
@MapperScan("com.learning.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 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 // 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 { System.out.println("字体:"+fontList[i]); } } } 实现效果:模板图片为:1920 x 1080 px。
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 // 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 { System.out.println("字体:"+fontList[i]); } } } 实现效果:模板图片为:1920 x 1080 px。
// 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 { System.out.println("字体:"+fontList[i]); } } } 实现效果:模板图片为:1920 x 1080 px。
{
System.out.println("字体:"+fontList[i]);
}
}
}
实现效果:模板图片为:1920 x 1080 px。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~