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

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绘制图片并进行合成的更多相关文章

  1. Java中图片压缩处理

    原文http://cuisuqiang.iteye.com/blog/2045855 整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享. 首先,要压缩的图片格式不能说动态图片,你 ...

  2. java Swing 图片缓冲机制

    java Swing 图片缓冲机制: 参考:http://jorneyr.iteye.com/blog/868858#comments package util; import java.awt.ge ...

  3. java实现图片压缩

    java实现图片压缩 package Test; import java.awt.Image; import java.awt.image.BufferedImage; import java.io. ...

  4. UWP&WP8.1 重新绘制图片 WriteableBitmap用法 图片转byte[]数组,byte[]数组转图片

    ---恢复内容开始--- WriteableBitmap 是UWP和WP8.1绘制图片的,重组图片的最重要方法.方法较为简单,方法多样性. 通过查看文档,WriteableBitmap的继承性是    ...

  5. java获取图片原始尺寸

    java获取图片原始尺寸 URL url = null; InputStream is = null; BufferedImage img = null; try { url = new URL(pi ...

  6. html5 绘制图片 drawImage

    要在绘图上下文中绘制图片,可以使用 drawImage 方法.该方法有三种不同的参数: drawImage(image,dx,dy) drawImage(image,dx,dy,dw,dh) d ...

  7. 使用html5 canvas绘制图片

    注意:本文属于<html5 Canvas绘制图形入门详解>系列文章中的一部分.如果你是html5初学者,仅仅阅读本文,可能无法较深入的理解canvas,甚至无法顺畅地通读本文.请点击上述链 ...

  8. Android Canvas使用drawBitmap绘制图片

    1.基本的绘制图片方法 //Bitmap:图片对象,left:偏移左边的位置,top: 偏移顶部的位置 drawBitmap(Bitmap bitmap, float left, float top, ...

  9. android中Canvas使用drawBitmap绘制图片

    1.主要的绘制图片方法 //Bitmap:图片对象,left:偏移左边的位置,top: 偏移顶部的位置     drawBitmap(Bitmap bitmap, float left, float ...

随机推荐

  1. [LeetCode 题解]: Valid Parentheses

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  2. 二十、Node.js- WEB 服务器 (三)静态文件托管、 路 由

    1.Nodejs 静态文件托管 上一讲的静态 web 服务器封装 项目结构: Web服务器封装成的模块:router.js代码: var http=require('http'); var fs=re ...

  3. Mysql数据类型《一》整数类型

    数值类型 1. 整数类型 整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT 作用:存储年龄,等级,id,各种号码等 ======================== ...

  4. js中apply详解

    学习http://www.cnblogs.com/delin/archive/2010/06/17/1759695.html 1.对象的继承,一般的做法是复制:Object.extend protot ...

  5. Java中不通过构造方法创建对象的方法总结

    我们常说,Java是一种面向对象的语言,因而在Java中几乎所有的操作都离不开对象.而在Java语言中,最常见的创建对象的方法是通过对类构造器的调用,除此之外,其实还有下面几种可以创建对象的方法. 1 ...

  6. [Alpha]Scrum Meeting#2

    github 本次会议项目由PM召开,时间为4月2日晚上10点30分 时长25分钟 任务表格 人员 昨日工作 下一步工作 木鬼 撰写内置问卷(issue#3) 撰写团队贡献分配计划(issue#39) ...

  7. DEM反应添加顺序注意问题

    在含有DEM反应的dat中,均相反应的block要在DEM反应之前,例如: @(RXNS) (some reaction equations) @(END) @(DES_RXNS) (some rea ...

  8. C#之集合

    数组(http://www.cnblogs.com/afei-24/p/6738128.html)的大小是固定的.如果元素的个数是动态的,就应使用集合类. 列表(http://www.cnblogs. ...

  9. system命令

    服务查看 查看所有服务运行状态: service --status-all chkconfig --list 查看单个服务的运行状态 service sshd status 查看启动状态,是否开机自动 ...

  10. find命令用法集锦

    find命令用法: 01--过滤日志find -name "catelina.*.out"|xargs -f |grep '关键字' 02 -忽略一个目录或者多个目录find ./ ...