`
hvang1988
  • 浏览: 51368 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

纯java处理图片拼接(背景上边添加文字和图片)

阅读更多
好消息,百度网盘专业搜索网站上线了
打开瞧一瞧:http://bitar.cn
package com.pic;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.imageio.ImageIO;


/**
 * 纯java处理图片拼接(背景上边添加文字和图片)
 * @author Administrator
 *
 */
public class JoinMutiImage {
	private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	public static void main(String[] args) throws IOException {
		JoinMutiImage.makePicture();
	}
	private static void drawImage(int x,int y,BufferedImage ImageNew,BufferedImage ImageOne) throws IOException{
		int width = ImageOne.getWidth();//图片宽度
		int height = ImageOne.getHeight();//图片高度
		int[] ImageArrayTop = new int[width*height];
		ImageArrayTop = ImageOne.getRGB(0,0,width,height,ImageArrayTop,0,width);
		ImageNew.setRGB(x,y,width,height,ImageArrayTop,0,width);//设置头部的RGB
	}

	public static byte[] makePicture() throws IOException{
		
//		String imagePath = ImageUtil.class.getResource("/").getPath();
//		System.out.println(imagePath);
//		int idx1 = imagePath.indexOf("WEB-INF");
//		imagePath = imagePath.substring(0, idx1).concat("images/shopping_basket/");
		
		String imagePath = "";
		
		File image_1_top = new File(imagePath.concat("food-cart---save---product_01.png"));
		File image_2_food = new File(imagePath.concat("food-cart---save---product_01-02.png"));
		
		File image_3_shadow = new File(imagePath.concat("food-cart---save---product_01-03.png"));
		File image_4_space = new File(imagePath.concat("food-cart---save---product_05.png"));
		File image_5_code = new File(imagePath.concat("food-cart---save---product_06.png"));
		
		
		BufferedImage bf_image_1_top =ImageIO.read(image_1_top);
		BufferedImage bf_image_2_food =ImageIO.read(image_2_food);
		BufferedImage bf_image_3_shadow =ImageIO.read(image_3_shadow);
		BufferedImage bf_image_4_space =ImageIO.read(image_4_space);
		BufferedImage bf_image_5_code =ImageIO.read(image_5_code);

		int width = bf_image_1_top.getWidth();

		int heightTotal = 1+1+1;//根据多个内容求和算总高度
		
		BufferedImage ImageNew = new BufferedImage(width,heightTotal,BufferedImage.TYPE_INT_RGB);
		
		int currentY = 0;
		//第一个图拼接
		drawImage(0,0,ImageNew,bf_image_1_top);
		currentY+=bf_image_1_top.getHeight();
		
		//第二个图拼接
//		for (int i = 0; i < 集合.size(); i++) {
//			drawProduct(0,currentY,ImageNew,bf_image_2_food,foods.get(i));
//			currentY+=bf_image_2_food.getHeight();
//		}
		
		
		Graphics g = ImageNew.getGraphics();
		Font f2 = new Font("",Font.BOLD,12);
	    g.setFont(f2);
		g.drawString(format.format(new Date()),width-130,heightTotal-30);
		g.dispose();
		
		//File outFile = new File(outFilePath);
	    //ImageIO.write(ImageNew, "png", outFile);//写图片
		//
		ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
		ImageIO.write(ImageNew, "JPEG", jpegOutputStream);
		byte[] captchaChallengeAsJpeg = null;
		captchaChallengeAsJpeg = jpegOutputStream.toByteArray();
		jpegOutputStream.close();
		
		//InputStream is = new ByteArrayInputStream(captchaChallengeAsJpeg);
		//return is;
		
		return captchaChallengeAsJpeg;
		//
		
	}
	
//	private static void drawTop(int x,int y,BufferedImage ImageNew,BufferedImage ImageOne) throws IOException{
//		int width = ImageOne.getWidth();//图片宽度
//		int height = ImageOne.getHeight();//图片高度
//		int[] ImageArrayTop = new int[width*height];
//		ImageArrayTop = ImageOne.getRGB(0,0,width,height,ImageArrayTop,0,width);
//		ImageNew.setRGB(x,y,width,height,ImageArrayTop,0,width);//设置头部的RGB
//	}
	
	private static void drawProduct(int x,int y,BufferedImage ImageNew,BufferedImage ImageTwo) throws IOException{
		int widthTwo = ImageTwo.getWidth();//图片高度
		int heightTwo = ImageTwo.getHeight();//图片高度
		int[] ImageArrayTwo = new int[widthTwo*heightTwo];
		ImageArrayTwo = ImageTwo.getRGB(0,0,widthTwo,heightTwo,ImageArrayTwo,0,widthTwo);
		ImageNew.setRGB(x,y,widthTwo,heightTwo,ImageArrayTwo,0,widthTwo);
		
		
		URL url = new URL("图片");
		URLConnection conn = url.openConnection();
		InputStream inStream = conn.getInputStream();

	    BufferedImage ImagePuduct = ImageIO.read(inStream);    
	    int widthPuduct = ImagePuduct.getWidth();
	    int heightPuduct = ImagePuduct.getHeight();//图片高度
	    
	    Image image=ImagePuduct.getScaledInstance(100,80,Image.SCALE_DEFAULT);//获取缩略图
	    /*再创建一个BufferedImage对象 用于创建100*100大小的图像*/
	    BufferedImage oimage; 
	    oimage = new BufferedImage(100,80,Image.SCALE_DEFAULT); 
	    /*获取图像上下文对象,然后把刚才的Image对象画到BufferedImage中去
	     	切忌, drawImage()方法有很多重载方法,一定要选用下面的这个,它会95%的复制原图的图片质量。其他重载方法你也可以试试,可能生成出来的图片很丑噢~哈哈
	     */
	    oimage.getGraphics().drawImage(image,0,0, null); 
	    
	    widthPuduct = 100;
	    heightPuduct = 80;
	    int[] ImageArrayPuduct = new int[widthPuduct*heightPuduct];
	    ImageArrayPuduct = oimage.getRGB(0,0,widthPuduct,heightPuduct,ImageArrayPuduct,0,widthPuduct);
	    ImageNew.setRGB(60,y+20,widthPuduct,heightPuduct,ImageArrayPuduct,0,widthPuduct);
		
		drawProductText(x,y,widthPuduct,heightPuduct,ImageNew);
	}
	
	private static void drawProductText(int x,int y,int widthProduct,int heightProduct,BufferedImage ImageNew){
	      Graphics g = ImageNew.getGraphics();
	      Font f = new Font("",Font.BOLD,24);
	      g.setColor(Color.decode("#333"));
	      g.setFont(f);
	      g.drawString("内容",x+60+widthProduct+20,y+40);
	      
	      
	      f = new Font("",Font.BOLD,18);
	      g.setFont(f);
	      g.setColor(Color.decode("#F4CAC9"));
	      g.drawString("内容",60+widthProduct+59,y+20+20+32);
	      

//	      
	      g.dispose();
	}
	/*
	private static void drawBottom(int x,int y,BufferedImage ImageNew,BufferedImage ImageBottom) throws IOException{
		int width = ImageBottom.getWidth();//图片高度
		int heightBottom = ImageBottom.getHeight();//图片高度
		int[] ImageArrayBottom = new int[width*heightBottom];
//		Graphics g = ImageNew.getGraphics();
//		int xx =10;
//		int yy =10;
//		Font f2 = new Font("",Font.BOLD,12);
//	    g.setFont(f2);
//		g.drawString(format.format(new Date()),xx,yy);
//		g.dispose();
		ImageArrayBottom = ImageBottom.getRGB(0,0,width,heightBottom,ImageArrayBottom,0,width);
		ImageNew.setRGB(x,y,width,heightBottom,ImageArrayBottom,0,width);
	}
	*/
}



分享到:
评论

相关推荐

    java(springBoot)视频处理,视频剪辑(对视频,音频,字幕等处理)

    源码中有说明文档,按照文档...源码中包括有视频合成,视频加背景音乐,多图片+音频合并为视频,音频合并,视频加字幕,视频去声音,视频格式转换,视频播放,视频裁剪,获取音频或视频信息,定义视频大小,视频截图

    基于opencv3.1库的JAVA源码

    第1章 Java概述、安装及简易教学 14 1-1 Java概述 14 1-2 Java安装 16 1-3 Eclipse安装 18 1-4 GUI设计工具WindowBuilder 18 1-5 在Eclipse开发第一个Java程式 23 1-6 在Eclipse开发第一个Java视窗程式-显示影像 26 ...

    电子相册JAVA语言版本的

    在本例中,程序通过调用此方法获取了图片数量、图片名称和图片路径等参数,并利用这些参数完成了图片的加载和显示。 综上所述,这段Java代码展示了如何实现一个简单的电子相册Applet程序,包括了基本的界面设计、...

    servlet生成验证码图片

    5. **颜色变化**:每次刷新验证码图片时,可以改变背景色和文字颜色,这可以通过生成新的随机颜色来实现。 6. **响应HTTP请求**:当用户请求验证码图片时,Servlet会接收到HTTP请求,然后根据上述步骤生成验证码...

    图像合并,可以实现多张图片快速合并一一张

    - **图像水印**:在图片上添加文字或图像水印。 - **图像裁剪与缩放**:在合并前先对原始图片进行处理,适应目标尺寸。 - **滤镜效果**:合并前或合并后应用滤镜,改变整体色调或风格。 通过理解以上知识点并...

    Servlet图片验证码

    在本示例中,我们看到一个使用Java Servlet和图形库来生成图片验证码的简单实现。 首先,我们创建了一个名为`ImageServlet`的类,它继承自`HttpServlet`。`HttpServlet`是处理HTTP请求的基础类,提供了`doGet`和`...

    opencv320.jar

    在Java中,OpenCV提供了`opencv-320.jar`这样的库文件,使得开发者能够轻松地在Java程序中集成计算机视觉功能,比如添加水印、图片合成和图片切割等操作。 1. **添加水印**: 在图像处理中,水印通常用于标识...

    png合并软件有代码

    2. **1万符号ok.ttf**:这是一款字体文件,其中包含了一万个字符,可能用于在拼接过程中添加文字或图标,比如在每张图片上添加编号或标签。 3. **说明.txt**:这是可能包含关于如何使用代码或软件的说明文档,用户...

    textview文字样式包含部分文字事件

    在许多场景下,我们不仅需要展示普通的文本,还可能需要对文本进行样式化处理,或者对部分文字添加特殊功能,比如点击触发事件、设置不同颜色、背景色,甚至拨打电话。`TextView` 的强大之处就在于它可以支持这些...

    04747 Java语言程序设计(一) 2013年10月

    - **题目**: 请写出使用纯Java JDBC驱动程序连接数据库的步骤。 - **解析**: 加载驱动、建立连接、执行SQL语句、处理结果集、关闭资源。 **完全数寻找** - **题目**: 方法void findPerfectNumber()的功能是找出1000...

    captcha.zip

    1. **图像处理**:使用Java的`java.awt.image.BufferedImage`类生成和处理图像,包括添加噪声、文字、形状等元素。可以使用`Graphics2D`类进行绘制。 2. **裁剪与偏移**:创建两个`BufferedImage`对象,一个表示...

    QQ聊天器代码,可用于局域网聊天

    3. **事件处理机制**:理解如何为Swing组件添加事件监听器并处理相应事件。 4. **字符串处理**:熟悉字符串拼接、分割等操作,用于消息的格式化处理。 通过以上分析可以看出,这款QQ聊天器虽然简单,但涵盖了多个...

    java与js代码互调示例代码

    在Java代码中,可以通过将字符串和JavaScript方法名拼接成一个URL,然后使用loadUrl方法加载。在这个过程中,首先需要确定JavaScript中实现的方法名(在本例中为callBackServive),然后将需要传递的参数拼接成字符...

    Android button和TextVeiw用法相关实例.rar

    除了基础用法,Button和TextView还有许多进阶功能,如自定义样式、添加图片、设置文本颜色和字体等。例如,可以通过`android:background`为Button设置背景,通过`android:textColor`改变TextView的文本颜色。 对于...

    assignment6

    ### Java程序设计:读取文件并判断是否为外星文字 #### 作业背景与目标 本次作业(Assignment #6)是针对一门计算机科学基础课程(CSc127A)的学生设计的,主要目的是通过实践操作来加深学生对Java语言的理解,并...

    opencv-4.4.0 & opencv_contrib-4.4.0

    使用这些资源,开发者可以构建自己的图像处理和计算机视觉应用,如人脸识别、物体检测、视频分析、图像拼接等。安装时,通常先解压opencv-4.4.0.zip,然后配置编译环境,再将opencv_contrib-4.4.0.zip中的模块添加到...

    长图生成器电脑版 长微博生成器 长图生成器离线电脑版

    长图生成器是一款专为电脑用户设计的工具,主要用于创建和编辑长图片,尤其是对于需要在社交媒体上分享长篇内容的用户,如微博用户。它提供了便捷的方式将多张图片或文字整合成一张连续的、长条形的图片,使得在有限...

    文本文件处理 文本文件加序号工具 v1.0

    "文本文件加序号工具 v1.0" 是一个专为处理此类需求设计的实用工具,它能帮助用户快速地在文本文件中为特定文字添加序列号,对于需要自动生成具有顺序的文本内容,例如自动喊话软件中的脚本生成,非常有帮助。...

    opencv4.1.1和opencv-contrib-4.1.1和相关文件

    这些特性通常不包含在OpenCV的主要发行版中,但为开发者提供了更多的功能选择,比如面部识别、文字识别、深度学习模块(DNN)、Xfeatures2D模块(包含更多特征检测器和描述符),以及其他一些高级图像处理和计算机...

Global site tag (gtag.js) - Google Analytics