`

java合成图片

    博客分类:
  • Java
阅读更多
Class1

package com.company.erp.exam.gw_certificate.action;

/*------------------------------------------------------------------------------------------------------------------*/
/*  版本ID       日期                 姓名        改版内容
/*------------------------------------------------------------------------------------------------------------------*/

import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import com.company.erp.common.gw_certificate.databean.Gw_certificateDO;
import com.company.erp.common.gw_certificate.form.Gw_certificateForm;
import com.company.erp.common.gw_certtemp.databean.Gw_certtempDO;
import com.company.erp.common.purview_organization.databean.Purview_organizationDO;
import com.company.erp.common.purview_user.databean.Purview_userDO;
import com.company.erp.common.system_basicdata.databean.System_basicdataDO;
import com.company.erp.exam.gw_certificate.databean.Gw_certificateViewDO;
import com.company.erp.exam.gw_certificate.si.Gw_certificateSI;
import com.company.erp.system.bo.System_urlBO;
import com.company.util.Common;
import com.company.util.ObjectEvaluate;
import com.gsf.arch.BaseAction;
import com.gsf.tool.calendar.DateUtil;
import com.gsf.tool.constant.Custom;
import com.gsf.tool.exception.BaseException;
import com.gsf.tool.image.dto.LetterDTO;
import com.gsf.tool.image.util.CreateImage;
/**	
  *
  * 查看 证书 
  */
public class Gw_certificateSI_retrieve_selectAction extends BaseAction {
	public void myLogic(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response,HashMap beanMap) throws BaseException {
		Gw_certificateForm curForm=(Gw_certificateForm)form;		
		Gw_certificateDO curDO = (Gw_certificateDO)curForm.getDO();  
	    //通过spring的配置文件来调用,这样的好处是利用了spring的事务管理

	    Gw_certificateSI si =  new Gw_certificateSI();

	    curDO=(Gw_certificateDO)si._retrieve(curDO);
        //将BaseDO对象数组转换为ActionForm数组
	    
		String cacheName = "Certtemp";
		String className = Gw_certtempDO.class.getName();
		Long certtemp_id = curDO.getCerttemp_id();
		Gw_certtempDO gw_certtempDO = null ;
		//user的id
		Long user_id = curDO.getUser_id();
		//获取考证时间  作为  发证时间 ;

		Date examTime = curDO.getExamTime();
		Date expiredDate = curDO.getExpiredDate();
		Purview_userDO purview_userDO = null;
		//从cache中获得用户的信息
		if(user_id != null){
			 purview_userDO = (Purview_userDO)Common.parseDBCache_Row("PURVIEW_USER", 
					user_id.toString(),Purview_userDO.class.getName());
		}
		
		
		Long certificatePictureAddrURL = null;		
		String newJPGFileName = null ;
		if( certtemp_id != null ){
			 gw_certtempDO = (Gw_certtempDO)Common.parseDBCache_Row(cacheName, certtemp_id.toString(), className);					
		}
		
			if( gw_certtempDO != null ){
				certificatePictureAddrURL = gw_certtempDO.getCertificatePictureAddrURL();
				
			String backImageFileName = "";
			if(certificatePictureAddrURL != null)
				backImageFileName = System_urlBO.getPath(certificatePictureAddrURL);
			
			//还要增加用户的基本信息

			ArrayList letterDTO_list =  getLetters(gw_certtempDO,purview_userDO,examTime, expiredDate);

			ArrayList imageDTO_list=  new ArrayList();
			
			CreateImage createImage = new CreateImage();
		
			
			String tempJPGFileName=Common.getFileMainNameByUserSession(request) + ".jpg";
			
			 newJPGFileName=tempJPGFileName;
			
			Date currentDBDate=Common.getDBCurrentDate_Memory();
			String currentDBDate_str=DateUtil.format(currentDBDate,"yyyyMMdd");
			
			String tempItemName="tempCertificate";
			String physicalPath = Common.getParaCacheItemValue(tempItemName);
			physicalPath=Common.getFilePath(physicalPath,Custom.fileSeparator,currentDBDate_str);
			newJPGFileName=physicalPath+newJPGFileName;
			
			if(!new File(physicalPath).isDirectory())
			{
			  new File(physicalPath).mkdirs();
			}
			if(!backImageFileName.equals(""))
				createImage.createJpg(backImageFileName, imageDTO_list, letterDTO_list,newJPGFileName);
	
			newJPGFileName=tempJPGFileName;
			String virtualPath = Common.getParaCacheItemWeburl(tempItemName);
			virtualPath=Common.getFilePath(virtualPath,"/",currentDBDate_str);
			newJPGFileName=virtualPath+newJPGFileName;
			
		}
		
		

//      判断领取没        
        request.setAttribute("fileName" ,newJPGFileName);   

	}
	
	public  ArrayList  getLetters( Gw_certtempDO gw_certtempDO , Purview_userDO purview_userDO ,Date examTime, Date expiredDate){
		ArrayList letterDTO_list = new ArrayList();
		Calendar calendar =Calendar.getInstance(); 
		calendar.setTime(examTime);
		String  year = calendar.get(Calendar.YEAR)+"";
		String month = calendar.get(Calendar.MONTH)+1+"";
		String day = calendar.get(Calendar.DAY_OF_MONTH)+"";
		Calendar calendar1 =Calendar.getInstance(); 
		calendar1.setTime(expiredDate);
		String  yeare = calendar1.get(Calendar.YEAR)+"";
		String monthe = calendar1.get(Calendar.MONTH)+1+"";
		String daye = calendar1.get(Calendar.DAY_OF_MONTH)+"";
		


		// 证书模板的名称

		String certtempName = gw_certtempDO.getCerttempName();
		String certtempNameXY = gw_certtempDO.getCerttempNameXY();
		LetterDTO letterCerttempNameDTO = getLetter(certtempName,certtempNameXY,"黑体","40","#000000");
		letterDTO_list.add(letterCerttempNameDTO);
		

		
		// 签发单位
		String signname = gw_certtempDO.getCertificateSignname();
		String signnameXY = gw_certtempDO.getCertificateSignnameXY();
		LetterDTO letterSignNameDTO = getLetter(signname,signnameXY,"宋体","20","#000000");		
		letterDTO_list.add(letterSignNameDTO);
		
		// 姓名
		String userName = null;
		String identityCard = null;
		Long specialtyCode = null;
		Long positionCode = null;
		Long gradeCode = null;
		Long userOrg_id = null ;
		String userOrgName = null ;
		String db_cacheSpecialityName = "Speciality";
		String db_cachePostName = "Post";
		String db_cacheGradeName = "Grade";
		String db_cacheOrganizationName = "organization";
		//专业岗位等级的名称

		String certificateType = "";
		if(purview_userDO!= null ){
			userName = purview_userDO.getLastNameFirs();
			identityCard = purview_userDO.getIdentityCard();
			userOrg_id = purview_userDO.getOrganization_id();

			//根据证书模板上的专业、岗位、等级  
			specialtyCode = gw_certtempDO.getSpecialtyCode();
			positionCode = gw_certtempDO.getPositionCode();
			gradeCode = gw_certtempDO.getGradeCode();	
			
			if(  userOrg_id != null ){
				Purview_organizationDO purview_organizationDO = (Purview_organizationDO)Common.parseDBCache_Row(db_cacheOrganizationName, 
						userOrg_id.toString(),Purview_organizationDO.class.getName());	
				if( purview_organizationDO != null ){
					userOrgName = purview_organizationDO.getOrganizationName();
				}
			}
			
			if(specialtyCode != null){
				System_basicdataDO system_basicdataSpDO = (System_basicdataDO)Common.parseDBCache_Row(db_cacheSpecialityName, 
						specialtyCode.toString(),System_basicdataDO.class.getName());
				if(system_basicdataSpDO!=null){
					certificateType += system_basicdataSpDO.getOptionsName();
				}
			}

			if(gradeCode != null){
				System_basicdataDO system_basicdataGradeDO = (System_basicdataDO)Common.parseDBCache_Row(db_cacheGradeName, 
						gradeCode.toString(),
															System_basicdataDO.class.getName());
				if(system_basicdataGradeDO != null){
					certificateType += system_basicdataGradeDO.getOptionsName();
				}
			}
				
		} 

		// 单位名称
		String userOrgNameXY = gw_certtempDO.getUserOrgXY();
		LetterDTO userOrgNameDTO = getLetter(userOrgName,userOrgNameXY,"宋体","20","#000000");		
		letterDTO_list.add(userOrgNameDTO);
		
		// 有效期
		String ExpiresXY = gw_certtempDO.getExpiresXY();
		LetterDTO ExpiresDTO = getLetter("有效期至"+yeare+"年"+monthe+"月"+daye+"日",ExpiresXY,"宋体","20","#000000");		
//		LetterDTO ExpiresDTO = getLetter("截止日期:"+DateUtil.format(expiredDate, DateUtil.dateFormatYYYYMMDD),ExpiresXY,"宋体","20","#000000");		
		letterDTO_list.add(ExpiresDTO);
		
		// 年

		String yearXY = gw_certtempDO.getYearXY();
		LetterDTO yearXYDTO = getLetter(year,yearXY,"宋体","20","#000000");		
		letterDTO_list.add(yearXYDTO);

		// 月

		String monthXY = gw_certtempDO.getMonthXY();
		LetterDTO monthXYDTO = getLetter(month,monthXY,"宋体","20","#000000");		
		letterDTO_list.add(monthXYDTO);
		
		// 日

		String dayXY = gw_certtempDO.getDayXY();
		LetterDTO dayXYDTO = getLetter(day,dayXY,"宋体","20","#000000");		
		letterDTO_list.add(dayXYDTO);
		
		
		// 姓名
		String userNameXY = gw_certtempDO.getUserNameXY();
		LetterDTO userNameDTO = getLetter(userName,userNameXY,"宋体","20","#000000");		
		letterDTO_list.add(userNameDTO);
		
		
		// 身份证

		
		String identityCardXY = gw_certtempDO.getIdentityCardXY();
		LetterDTO identityCardDTO = getLetter(identityCard,identityCardXY,"宋体","20","#000000");		
		letterDTO_list.add(identityCardDTO);
		
		//专业岗位等级certificateTypeXY
		String certificateTypeXY = gw_certtempDO.getCertificateTypeXY();
		LetterDTO certificateTypeDTO = getLetter(certificateType,certificateTypeXY,"宋体","20","#000000");		
		letterDTO_list.add(certificateTypeDTO);
		
		return letterDTO_list;
		
	}
	
	
	
//  字体的名称  ,xy 坐标 , 字体类型 ,字体大小, 字体的颜色

	public  LetterDTO getLetter ( String name ,String xy ,String style ,String size ,String fontColor ){
		
		LetterDTO letterDTO = new LetterDTO();		
		letterDTO.setLetter(name);
		Integer  x = 0;
		Integer  y = 0;
		if(xy != null){
			xy.replace(',', ',');
			String[] str = xy.split(",");
			if(str.length > 1){
				x = Integer.parseInt(str[0]);
				y = Integer.parseInt(str[1]);
			}
			else{
				x = Integer.parseInt(str[0]);
				y = 0;
			}
		}
		letterDTO.setX(x);
		letterDTO.setY(y);
		
		Font font = Font.decode(style);
		font=font.deriveFont(Float.parseFloat(size));//font.deriveFont(float f)复制当前 Font 对象并应用新设置字体的大小

		letterDTO.setFont(font);		
		Color color=Color.decode(fontColor);		
		letterDTO.setColor(color);
		
		return letterDTO  ;
	}
}

Class2 createJpg
package com.gsf.tool.image.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;

import javax.imageio.ImageIO;

import com.company.erp.common.gw_certtemp.databean.Gw_certtempDO;
import com.company.erp.system.bo.System_urlBO;
import com.gsf.tool.image.dto.ImageDTO;
import com.gsf.tool.image.dto.LetterDTO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class CreateImage {

	/**
	 * 根据提供的文字生成jpg图片
	 * 
	 * @param backJpgPath
	 *            String 背景图片路径
	 * @param imageDTO_list
	 *             小图片dto(第个元素都是LetterDTO) list
	 * @param letterDTO_list 
	 *             文字dto(第个元素都是ImageDTO_list) list
	 * @param newJPGFileName
	 *            String 生成的新JPG图片名称
	 */
	public boolean createJpg(String backImageFileName,ArrayList imageDTO_list, ArrayList letterDTO_list,
			String newJPGFileName) {
		boolean ret=false;
		try { // 宽度 高度
		
		File backJpg_file = new File("E:\\companyERP_data\\resource\\url\\certificatePicture\\jpg\\certtemp\\zhengshu.jpg");
			BufferedImage back_bufferdImage = ImageIO.read(backJpg_file);
			Graphics2D graphics2D = back_bufferdImage.createGraphics();
			graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); //去除锯齿(当设置的字体过大的时候,会出现锯齿)

			if (letterDTO_list!=null)
			{
			  for(int i=0;i<letterDTO_list.size();i++)
			  {
				LetterDTO letterDTO=(LetterDTO) letterDTO_list.get(i);
				if ( (letterDTO!=null) && (letterDTO.getColor()!=null) && (letterDTO.getFont()!=null) )
				graphics2D.setColor(letterDTO.getColor()); // 字的颜色
				Font letter_Font=letterDTO.getFont();
				graphics2D.setFont(letter_Font); 
				FontMetrics letter_FontMetrics=graphics2D.getFontMetrics(letter_Font);
			  	int letter_Ascent=letter_FontMetrics.getAscent();
			  	int letter_leading=letter_FontMetrics.getLeading();
				graphics2D.drawString(letterDTO.getLetter(), letterDTO.getX(),letterDTO.getY()+letter_Ascent-letter_leading); //在指定坐标除添加文字
			  }
			}

			graphics2D.dispose();// 释放资源

			if (imageDTO_list!=null)
			{
			  for(int i=0;i<imageDTO_list.size();i++)
			  {
				ImageDTO imageDTO=(ImageDTO) imageDTO_list.get(i);
				if ((imageDTO!=null) && imageDTO.getImageFileName()!=null)
				{
				  File smallImage_file = new File(imageDTO.getImageFileName());
				  BufferedImage smallImage_bufferedImage = ImageIO.read(smallImage_file);
				  int width = smallImage_bufferedImage.getWidth(); // 图片宽度
				  int height = smallImage_bufferedImage.getHeight(); // 图片高度
				  // 从图片中读取RGB
				  int[] imageArray = new int[width * height];
				  imageArray = smallImage_bufferedImage.getRGB(0, 0, width, height,imageArray, 0, width);
				  back_bufferdImage.setRGB(imageDTO.getX(), imageDTO.getY(), width, height,imageArray, 0, width);
				}
			  }
			  
			}
			FileOutputStream out = new FileOutputStream(newJPGFileName); // 指定输出文件
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
			JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(back_bufferdImage);
			param.setQuality(50f, true);
			encoder.encode(back_bufferdImage, param); // 存盘
			out.flush();
			out.close();
			
			ret=true;
		} catch (Exception e) {
			System.out.println("createJpgByFont Failed!");
			e.printStackTrace();
		}
		return ret;
	}

	public static void main(String[] args) {
		ArrayList letterDTO_list=new ArrayList();
		LetterDTO letterDTO=new LetterDTO();
		
		letterDTO.setLetter("哈哈,终于可以合成图片了");
		letterDTO.setX(70);
		letterDTO.setY(63);
		
		Font font = Font.decode("宋体");
		font=font.deriveFont(Float.parseFloat("12"));//font.deriveFont(float f)复制当前 Font 对象并应用新设置字体的大小

		letterDTO.setFont(font);
		
		Color color=Color.decode("#FF0000");
		
		letterDTO.setColor(color);
		
		letterDTO_list.add(letterDTO);
		
		ArrayList imageDTO_list=new ArrayList();
		ImageDTO imageDTO=new ImageDTO();
		imageDTO.setImageFileName("C:\\jpg\\BlackUser.jpg");
		imageDTO.setX(383);
		imageDTO.setY(22);
		imageDTO_list.add(imageDTO);
		
		CreateImage createImage = new CreateImage();
	
		String backImageFileName = "C:\\jpg\\a.jpg";
		String newJPGFileName="C:\\jpg\\a1.jpg";
	
		createImage.createJpg(backImageFileName, imageDTO_list, letterDTO_list,newJPGFileName);
	}


}



模板

合成后的图片



  • 描述: 模板
  • 大小: 541 KB
  • 大小: 444.1 KB
分享到:
评论

相关推荐

    Java合成图片Java合成图片

    Java合成图片

    利用Java程序把多张图片合成一张图片

    然后,我们可以创建一个方法来合成图片。假设我们要将多张图片水平排列在一张新图片上,我们可以这样做: ```java public static BufferedImage composeImages(BufferedImage[] images, int spacing) { int width ...

    java多张图片合成,图片拼接,图片上写字

    本篇文章将深入探讨如何使用Java实现“多张图片合成”、“图片拼接”以及“图片上写字”的功能。我们将主要围绕提供的`ImgUtil.java`文件进行讲解。 1. **图片合成**: 图片合成是指将多张图片组合成一张新的图片...

    java实现图片合成的源码

    java实现图片合成的合成。可以使两张或多张图片合成起来,并且不失真

    安卓 图片合成视频(利用javacv)

    本项目的核心目标是通过JavaCV将指定目录下的JPG图片序列合成成一个视频文件。 首先,我们需要了解JavaCV的基本用法。JavaCV提供了一个Java接口,可以直接调用OpenCV和FFmpeg的函数。在Android中,我们通常需要添加...

    Java将图片合并为视频

    在Java编程环境中,将一系列图片合并成视频是一个常见的多媒体处理任务。这个项目文件提供了一种实现方式,让我们来深入探讨一下这个过程中的关键知识点。 首先,我们要了解的是Java中的多媒体处理库。在这个项目中...

    java 合成 gif

    总的来说,Java合成GIF涉及到了图像处理、编码算法和文件格式理解等多个层次的技术,这需要开发者对Java的IO操作、图像处理库和数据压缩有深入的理解。通过这些知识,开发者可以创建出自定义的动态GIF,满足各种应用...

    Java将多张图片合成为一张图像.rar

    Java将多张图片合成为一张,类似于PhotoShop中的合成图片,将两张图片合成输出为一张JPG,两幅图像叠加在一起,这是个比较基础的Java图像合成的例子。在JAVA中实现图片合成,本例的实现核心代码如下:  InputStream...

    图片处理工具(java实现图片合成、文字添加等)

    通过java实现对图片的进行合成处理,合成过程可制定位置,主要场景例如生成工作证或者胸牌

    java代码实现拼接图片

    选择图片,拼接图片,Java拼接多张图片,连接在一起 代码程序。

    Java实现视频 音频 图片的合成功能.rar

    在Java编程环境中,实现视频、音频和图片的合成功能是一项技术挑战,涉及到多媒体处理、图像操作和文件I/O等多个领域。本项目提供了一个完整的解决方案,包括安装文件和详细的Java源代码,允许开发者进行二次开发和...

    JAVA生成二维码,图片合成,图片添加文字对应资源和代码

    在本教程中,可能有代码演示如何在生成的二维码或合成图片上添加文字,如添加标题或描述。 6. **代码示例**: `ZxingUtils.java`文件很可能包含了上述操作的实现。例如,可能有一个名为`generateQRCode`的方法,...

    java ffmpeg实现视屏剪辑、srt字幕嵌入、视频合成、图片转视频

    java ffmpeg实现视屏剪辑、srt字幕嵌入、视频合成、图片转视频 通过test类运行。demo基于jave的源码。对ffmpeg的两种系统下的执行文件进行了替换。所以ffmpeg版本是最新的。可以执行ffmpeg官网上大多数的命令

    java程序把两张图片合成在一起

    在Java编程语言中,将两张图片合成在一起是一个常见的图像处理任务。这个过程涉及到对图像文件的读取、处理以及合并,通常使用Java的内置库如`java.io`和`javax.imageio`。在这个场景中,`FileInputStream`用于读取...

    java 操作图片,往图片写字,将多图片合并

    根据给定文件的信息,本文将围绕Java操作图片的方法展开,主要涵盖往图片上添加文字以及合并多张图片的功能。这些技术在制作许可证书、安全证书等应用场景中非常实用。 ### Java操作图片概述 #### 一、加载图片 在...

    java:图片列表合并转pdf完整示例

    在Java编程环境中,将图片列表合并转换为PDF文档是一项常见的任务,特别是在报告生成、文档整理或数据可视化等场景。这个示例将详细讲解如何通过Java实现这一功能,包括必要的库引用、代码实现以及可能遇到的问题。 ...

    大量图片合成到一个pdf文件

    总结,将大量图片合成到一个PDF文件,使用Java和PDFBox库是一个高效且灵活的方法。通过理解这些基本操作,你可以根据具体需求进行定制,创建出满足各种场景的PDF文档。在处理大批量图片时,可能还需要考虑性能优化,...

    java多张图片重叠。包括透明图片

    这是一个关键的图像处理技术,因为可以创建复杂的视觉效果或者进行图像合成。 首先,我们需要引入Java的`javax.imageio`和`java.awt`库,这两个库提供了处理图像所需的功能。`javax.imageio`用于读取和写入图像,而...

    java实现多张jgp图片转动画gif格式

    在Java编程环境中,将多张JPEG格式的图片转换为动态GIF格式是一项常见的图像处理任务。这个Demo展示了如何使用Java的图像处理库来完成这一过程。以下是对这个过程的详细解释: 首先,我们需要一个能够处理GIF格式的...

    java结合imageMagick实现图片渲染合成编辑.zip

    java结合imageMagick实现图片渲染合成编辑,源码附送安装文件学习文档。

Global site tag (gtag.js) - Google Analytics