Java绘制图片并进行合成
以下代码可以生成六行两列的图片,代码改成了可以接受参数可循环的。

package com.xgt.util;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream; public class ImgUtil {
private static final Logger logger = LoggerFactory.getLogger(ImgUtil.class);
public static Integer width = 500; public static Integer height = 500; public static void main(String[] args) {
try {
ImgUtil test = new ImgUtil();
// test.ImageTset();
} catch (Exception e) {
System.out.print(e);
}
} /**
* 注释勿删,测试有用
* 生成图片,合成图片
* @param fileDirectory
* @param realnames
* @throws Exception
*/
public static void ImageTset(String fileDirectory,String[] realnames) throws Exception { /*File _file1 = new File("D:\\QRCodePng\\奥特曼.png");
File _file2 = FontImageUtil.createJpgByFontAndAlign("奥特曼", "center", 32, 150, 50, Color.white, Color.black,
new Font(null, Font.BOLD, 32), "D:\\QRCodePng\\奥特曼.jpg");
File _file3 = new File("D:\\QRCodePng\\谷阿莫.png");
File _file4 = FontImageUtil.createJpgByFontAndAlign("谷阿莫", "center", 32, 150, 50, Color.white, Color.black,
new Font(null, Font.BOLD, 32), "D:\\QRCodePng\\谷阿莫.jpg");
File _file5 = new File("D:\\QRCodePng\\怪兽.png");
File _file6 = FontImageUtil.createJpgByFontAndAlign("怪兽", "center", 32, 150, 50, Color.white, Color.black,
new Font(null, Font.BOLD, 32), "D:\\QRCodePng\\怪兽.jpg");
File _file7 = new File("D:\\QRCodePng\\蓝胖.png");
File _file8 = FontImageUtil.createJpgByFontAndAlign("蓝胖", "center", 32, 150, 50, Color.white, Color.black,
new Font(null, Font.BOLD, 32), "D:\\QRCodePng\\蓝胖.jpg");
File _file9 = new File("D:\\QRCodePng\\淑女.png");
File _file10 = FontImageUtil.createJpgByFontAndAlign("淑女", "center", 32, 150, 50, Color.white, Color.black,
new Font(null, Font.BOLD, 32), "D:\\QRCodePng\\淑女.jpg");
File _file11 = new File("D:\\QRCodePng\\小草.png");
File _file12 = FontImageUtil.createJpgByFontAndAlign("小草", "center", 32, 150, 50, Color.white, Color.black,
new Font(null, Font.BOLD, 32), "D:\\QRCodePng\\小草.jpg");
Image src1 = javax.imageio.ImageIO.read(_file1);
Image src2 = javax.imageio.ImageIO.read(_file2);
Image src3 = javax.imageio.ImageIO.read(_file3);
Image src4 = javax.imageio.ImageIO.read(_file4);
Image src5 = javax.imageio.ImageIO.read(_file5);
Image src6 = javax.imageio.ImageIO.read(_file6);
Image src7 = javax.imageio.ImageIO.read(_file7);
Image src8 = javax.imageio.ImageIO.read(_file8);
Image src9 = javax.imageio.ImageIO.read(_file9);
Image src10 = javax.imageio.ImageIO.read(_file10);
Image src11 = javax.imageio.ImageIO.read(_file11);
Image src12 = javax.imageio.ImageIO.read(_file12);
//获取图片的宽度
int width = src1.getWidth(null);
//获取图片的高度
int height = src1.getHeight(null);*/ //构造一个类型为预定义图像类型之一的 BufferedImage。 宽度为第一只的宽度,高度为各个图片高度之和
BufferedImage tag = new BufferedImage(width + width, 4*height, BufferedImage.TYPE_INT_RGB);
//创建输出流
FileOutputStream out = new FileOutputStream("D:\\QRCodePng\\合成图.png");
//绘制合成图像
Graphics g = tag.createGraphics(); /**
* 此方法最多六行两列,6张二维码图和对应的6张文字图
* 如需扩展,要重新调整尺寸
* x=0,2,4,6,8...
* x对4取余为0存在线性关系,y=x/3
* x对4取余不为0存在线性关系,y=(x-2)/3
* x=1,3,5,7,9...
* x对4取余为1存在线性关系,y=(4x+2)/3
* x对4取余不为1存在线性关系,y=x/3
*/
for(int i=0;i<realnames.length*2;i++){
if(i%2==0) {
File _file = new File(fileDirectory,realnames[i/2]+".png");
Image src = javax.imageio.ImageIO.read(_file);
if(i%4==0){
g.drawImage(src, 0, i*height/3, width, height, null);
}else {
g.drawImage(src, width, (i-2)*height/3, width, height, null);
}
}else{
File _file = FontImageUtil.createJpgByFontAndAlign(realnames[(i-1)/2], "center", 32, 150, 50, Color.white, Color.black,
new Font(null, Font.BOLD, 32), fileDirectory+"\\"+realnames[(i-1)/2]+".jpg");
Image src = javax.imageio.ImageIO.read(_file);
if(i%4==1){
g.drawImage(src, 0, (i+2)*height/3, width, height/3, null);
}else {
g.drawImage(src, width, i*height/3, width, height/3, null);
}
}
} /*g.drawImage(src1, 0, 0, width, height, null);
g.drawImage(src2, 0, height, width, height/3, null);
g.drawImage(src3, width, 0, width , height, null);
g.drawImage(src4, width, height, width, height/3, null);
g.drawImage(src5, 0, 4*height/3, width, height, null);
g.drawImage(src6, 0, 7*height/3, width, height/3, null);
g.drawImage(src7, width, 4*height/3, width, height, null);
g.drawImage(src8, width, 7*height/3, width , height/3, null);
g.drawImage(src9, 0, 8*height/3, width, height, null);
g.drawImage(src10, 0, 11*height/3, width, height/3, null);
g.drawImage(src11, width, 8*height/3, width, height, null);
g.drawImage(src12, width, 11*height/3, width, height/3, null);*/
// 释放此图形的上下文以及它使用的所有系统资源。
g.dispose();
//将绘制的图像生成至输出流
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag);
//关闭输出流
out.close();
logger.info("合成图出来了");
} }
工具类FontImageUtil.java
package com.xgt.util;
import com.google.zxing.EncodeHintType;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.xgt.dto.ImgQrcodeDto;
import com.xgt.entity.BuildLabourer;
import com.xgt.service.BuildLabourerService;
import net.glxn.qrgen.core.image.ImageType;
import net.glxn.qrgen.javase.QRCode;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import javax.imageio.ImageIO; public class FontImageUtil { private static final Logger logger = LoggerFactory.getLogger(FontImageUtil.class);
public static void main(String[] args) throws Exception {
//createImage("谷阿莫", new Font("微软雅黑", Font.PLAIN, 32), new File("d:/a.png"), 150, 50); createJpgByFontAndAlign("生成图片", "right", , , , Color.white, Color.black,
new Font(null, Font.BOLD, ), "D:/right.jpg");
createJpgByFontAndAlign("生成图片", "center", , , , Color.white, Color.black,
new Font(null, Font.BOLD, ), "D:/center.jpg");
createJpgByFontAndAlign("生成图片", "left", , , , Color.white, Color.black,
new Font(null, Font.BOLD, ), "D:/left.jpg");
}/**
* 根据提供的文字生成jpg图片
*
* @param s
* String 文字
* @param align
* 文字位置(left,right,center)
* @param y
* y坐标
* @param width
* 图片宽度
* @param height
* 图片高度
* @param bgcolor
* Color 背景色
* @param fontcolor
* Color 字色
* @param font
* Font 字体字形字号
* @param jpgname
* String jpg图片名
* @return
*/
public static File createJpgByFontAndAlign(String s, String align, int y, int width, int height,
Color bgcolor, Color fontcolor, Font font, String jpgname) {
try { // 宽度 高度
BufferedImage bimage = new BufferedImage(width,
height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bimage.createGraphics();
g.setColor(bgcolor); // 背景色
g.fillRect(, , width, height); // 画一个矩形
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON); // 去除锯齿(当设置的字体过大的时候,会出现锯齿)
g.setColor(fontcolor); // 字的颜色
g.setFont(font); // 字体字形字号 int size = font.getSize(); //文字大小
int x = ;
if(align.equals("left")){
x = ;
} else if(align.equals("right")){
x = width - size * s.length() - ;
} else if(align.equals("center")){
x = (width - size * s.length())/;
}
g.drawString(s, x, y); // 在指定坐标除添加文字
g.dispose();
FileOutputStream out = new FileOutputStream(jpgname); // 指定输出文件
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage);
param.setQuality(50f, true);
encoder.encode(bimage, param); // 存盘
out.flush();
out.close();
} catch (Exception e) {
System.out.println("createJpgByFont Failed!");
e.printStackTrace();
}
return new File(jpgname);
} }
Java绘制图片并进行合成的更多相关文章
- Java中图片压缩处理
原文http://cuisuqiang.iteye.com/blog/2045855 整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享. 首先,要压缩的图片格式不能说动态图片,你 ...
- java Swing 图片缓冲机制
java Swing 图片缓冲机制: 参考:http://jorneyr.iteye.com/blog/868858#comments package util; import java.awt.ge ...
- java实现图片压缩
java实现图片压缩 package Test; import java.awt.Image; import java.awt.image.BufferedImage; import java.io. ...
- UWP&WP8.1 重新绘制图片 WriteableBitmap用法 图片转byte[]数组,byte[]数组转图片
---恢复内容开始--- WriteableBitmap 是UWP和WP8.1绘制图片的,重组图片的最重要方法.方法较为简单,方法多样性. 通过查看文档,WriteableBitmap的继承性是 ...
- java获取图片原始尺寸
java获取图片原始尺寸 URL url = null; InputStream is = null; BufferedImage img = null; try { url = new URL(pi ...
- html5 绘制图片 drawImage
要在绘图上下文中绘制图片,可以使用 drawImage 方法.该方法有三种不同的参数: drawImage(image,dx,dy) drawImage(image,dx,dy,dw,dh) d ...
- 使用html5 canvas绘制图片
注意:本文属于<html5 Canvas绘制图形入门详解>系列文章中的一部分.如果你是html5初学者,仅仅阅读本文,可能无法较深入的理解canvas,甚至无法顺畅地通读本文.请点击上述链 ...
- Android Canvas使用drawBitmap绘制图片
1.基本的绘制图片方法 //Bitmap:图片对象,left:偏移左边的位置,top: 偏移顶部的位置 drawBitmap(Bitmap bitmap, float left, float top, ...
- android中Canvas使用drawBitmap绘制图片
1.主要的绘制图片方法 //Bitmap:图片对象,left:偏移左边的位置,top: 偏移顶部的位置 drawBitmap(Bitmap bitmap, float left, float ...
随机推荐
- django drf安装和doc生成
1.打开drf官网https://www.django-rest-framework.org/,把相关的包pip install 2.INSTALLED_APPS添加drf 3.url配置 4.tes ...
- 网易严选的wkwebview测试之路
本文来自网易云社区 作者:孙娇 UIWebView是苹果继承于UIView封装的一个加载web内容的类,它可以加载任何远端的web数据展示在你的页面上,你可以像浏览器一样前进后退刷新等操作.不过苹果在 ...
- Spring Cloud使用总结
本文来自网易云社区,转载务必请注明出处. Spring Cloud 是spring团队推出的基于SpringBoot的分布式微服务框架,为开发者提供了在分布式系统(如配置管理.服务发现.断路器.智能路 ...
- Oracle ocp 12c-071最新考试题库及答案-1
choose the best answer: View the Exhibit and examine the structure of the CUSTOMERS table. CUSTOMER_ ...
- Red Hat安全性指南
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/security_guide/sec-usi ...
- MVC模式学习--雇员管理系统项目开发
1, 项目开发,使用原型开发, ① 开发流程: 需求分析->设计阶段->编码阶段->测试阶段->发布阶段/维护阶段 需求阶段:PM/项目经理 对客户 设计阶段:技术人员(架构师 ...
- [ActionScript 3.0] 自定义右键菜单
将自定义右键菜单的一些属性和方法归纳到AddRightMenu.as,通过实例化此类,调用相关方法即可测试! package { import flash.display.Sprite; import ...
- [ 转 ] windows环境%变量%大全
一.定义 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,比如临时文件夹位置和系统文件夹位置等.这点有点类似于DOS时期的默认路径,当你运行某些程序时除了在当前文件夹中寻找外,还会到设 ...
- 基于KMP与Levenshtein模糊匹配算法的银行联行号查询
在人民银行那里,每个银行的每一个营业网点都有自己唯一的银行联行号,根据这个号码能快速定位一间银行具体的分支行,就像根据一个身份证号码能快速确定一个人一样.例如汇款时,汇款单上要求填写收款人开户行,然后 ...
- Linux 内存监控
1.按照内存使用方式排序 top 之后使用 shift + m 那么top按照内存使用从大到小进行排列,使用 shift + P 表示按照CPU进行排序. bigfish 1118m 438m 30m ...