Java实现图片拼接

本文实例为大家分享了Java实现图片拼接的具体代码,供大家参考,具体内容如下

/**
 * 拼接图片(注:图片需长宽一致)
 * @param files  img1 ,img2
 * @param type  1:横向拼接 2:纵向拼接
 * @param targetFile 合成新的图片地址
 */
public static void mergeImage(String[] files, int type, String targetFile) {
 int len = files.length;
 if (len < 1) {
  throw new RuntimeException("图片数量小于1");
 }
 File[] src = new File[len];
 BufferedImage[] images = new BufferedImage[len];
 int[][] ImageArrays = new int[len][];
 for (int i = 0; i < len; i++) {
  try {
   src[i] = new File(files[i]);
   images[i] = ImageIO.read(src[i]);
  } catch (Exception e) {
   throw new RuntimeException(e);
  }
  int width = images[i].getWidth();
  int height = images[i].getHeight();
  ImageArrays[i] = new int[width * height];
  ImageArrays[i] = images[i].getRGB(0, 0, width, height, ImageArrays[i], 0, width);
 }
 int newHeight = 0;
 int newWidth = 0;
 for (int i = 0; i < images.length; i++) {
  // 横向
  if (type == 1) {
   newHeight = newHeight > images[i].getHeight() ? newHeight : images[i].getHeight();
   newWidth += images[i].getWidth();
  } else if (type == 2) {// 纵向
   newWidth = newWidth > images[i].getWidth() ? newWidth : images[i].getWidth();
   newHeight += images[i].getHeight();
  }
 }
 if (type == 1 && newWidth < 1) {
  return;
 }
 if (type == 2 && newHeight < 1) {
  return;
 }
 // 生成新图片
 try {
  BufferedImage ImageNew = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
  int height_i = 0;
  int width_i = 0;
  for (int i = 0; i < images.length; i++) {
   if (type == 1) {
    ImageNew.setRGB(width_i, 0, images[i].getWidth(), newHeight, ImageArrays[i], 0,
      images[i].getWidth());
    width_i += images[i].getWidth();
   } else if (type == 2) {
    ImageNew.setRGB(0, height_i, newWidth, images[i].getHeight(), ImageArrays[i], 0, newWidth);
    height_i += images[i].getHeight();
   }
  }
  //输出想要的图片
  ImageIO.write(ImageNew, targetFile.split("\\.")[1], new File(targetFile));
 } catch (Exception e) {
  throw new RuntimeException(e);
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java 字符串的拼接详解

    工作日忙于项目的逻辑实现,周六有点时间,从书柜里拿出厚厚的英文版Thinking In Java,读到了字符串对象的拼接.参考着这本书做个翻译,加上自己思考的东西,写上这篇文章记录一下. 不可变的String对象 在Java中,String对象是不可变的(Immutable).在代码中,可以创建多个某一个String对象的别名.但是这些别名都是的引用是相同的. 比如s1和s2都是"droidyue.com"对象的别名,别名保存着到真实对象的引用.所以s1 = s2 String s1

  • Java使用IO流实现音频的剪切和拼接

    需求: 使用IO流将指定目录下的若干个音频文件的高潮部分,进行剪切,并重新拼接成一首新的音频文件 思路(以两首歌为例): 第一首歌有一个输入流对象bis1.第二首歌有一个输入流对象bis2,他们公用一条输出流对象bos(在选择构造方法的时候选择含有布尔类型参数的那个),待第一首歌剪切完成后,在此基础上追加第二首歌的"高潮部分". 实现代码: import java.io.BufferedInputStream; import java.io.BufferedOutputStream;

  • Java中字符串拼接的一些细节分析

    工作日忙于项目的逻辑实现,周六有点时间,从书柜里拿出厚厚的英文版Thinking In Java,读到了字符串对象的拼接.参考着这本书做个翻译,加上自己思考的东西,写上这篇文章记录一下. 不可变的String对象 在Java中,String对象是不可变的(Immutable).在代码中,可以创建多个某一个String对象的别名.但是这些别名都是的引用是相同的. 比如s1和s2都是"droidyue.com"对象的别名,别名保存着到真实对象的引用.所以s1 = s2 复制代码 代码如下:

  • java拼接字符串时去掉最后一个多余逗号的方法

    本文实例讲述了java拼接字符串时去掉最后一个多余逗号的方法.分享给大家供大家参考.具体分析如下: 先看下面这段代码: for (int t = 0; t < memberLen; t++) { memTemp = stafferMap.get(strMember[t]); if(memTemp != null){ memberNames += memTemp + ","; } } 以上的代码,拼接的字符串会多一个",",比如:"str1,str2,

  • java反射拼接方法名动态执行方法实例

    近期由于负责项目的一个模块,该模块下有很多分类,每个分类都有一个编码code,这个值是作为一个参数携带过来的.但是每个code确实对应一个方法的. code的值有很多个,自己又不想做ifelse或者switch判断于是就狂搜资料,主要让我发现利用java的反射机制可以完美的解决这个问题 测试代码如下:(可以携带多个参数哦) package com.escs.xmlutils; import java.lang.reflect.Method; public class Test { public

  • java字符串拼接与性能分析详解

    假设有一个字符串,我们将对这个字符串做大量循环拼接操作,使用"+"的话将得到最低的性能.但是究竟这个性能有多差?如果我们同时也把StringBuffer,StringBuilder或String.concat()放入性能测试中,结果又会如何呢?本文将会就这些问题给出一个答案! 我们将使用Per4j来计算性能,因为这个工具可以给我们一个完整的性能指标集合,比如最小,最大耗时,统计时间段的标准偏差等.在测试代码中,为了得到一个准确的标准偏差值,我们将执行20个拼接"*"

  • Java实现图片拼接

    本文实例为大家分享了Java实现图片拼接的具体代码,供大家参考,具体内容如下 /** * 拼接图片(注:图片需长宽一致) * @param files img1 ,img2 * @param type 1:横向拼接 2:纵向拼接 * @param targetFile 合成新的图片地址 */ public static void mergeImage(String[] files, int type, String targetFile) { int len = files.length; if

  • selenium+java破解极验滑动验证码的示例代码

    摘要 分析验证码素材图片混淆原理,并采用selenium模拟人拖动滑块过程,进而破解验证码. 人工验证的过程 1.打开威锋网注册页面 2.移动鼠标至小滑块,一张完整的图片会出现(如下图1) 3.点击鼠标左键,图片中间会出现一个缺块(如下图2) 4.移动小滑块正上方图案至缺块处 5.验证通过 selenium模拟验证的过程 加载威锋网注册页面 下载图片1和缺块图片2 根据两张图片的差异计算平移的距离x 模拟鼠标点击事件,点击小滑块向右移动x 验证通过 详细分析 1.打开chrome浏览器控制台,会

  • Java如何实现图片的叠加与拼接操作

    关于Java实现图片的叠加与拼接的文章网络上确实很多,碰巧小编开发工作中也遇到这些问题,就做了简要的梳理,作为笔记以备不时之需. Java对图片的处理主要使用的是BufferedImage类. BufferedImage 子类描述具有可访问图像数据缓冲区的 Image.BufferedImage 由图像数据的 ColorModel 和 Raster 组成.Raster 的 SampleModel 中 band 的数量和类型必须与 ColorModel 所要求的数量和类型相匹配,以表示其颜色和 a

  • JAVA实现PDF转HTML文档的示例代码

    本文是基于PDF文档转PNG图片,然后进行图片拼接,拼接后的图片转为base64字符串,然后拼接html文档写入html文件实现PDF文档转HTML文档. 引入Maven依赖 <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox

  • java如何创建一个jdbc程序详解

    JDBC简介 Java数据库连接(Java Database Connectivity,JDBC),是一种用于执行SQL语句的Java API,它由一组用Java编程语言编写的类和接口组成. JDBC为数据库开发人员提供了一个标准的API,使他们能够用纯Java API来编写数据库应用程序. 使用JDBC编写的程序能够自动地将SQL语句传送给相应的数据库管理系统. JDBC扩展了Java的功能,由于Java语言本身的特点,使得JDBC具有简单.健壮.安全.可移植.获取方便等优势. 我们在没有JD

  • 注册验证java代码[针对上篇文章]

    http://www.jb51.net/article/19801.htm 复制代码 代码如下: <%@ page contentType="text/html; charset=gb2312" language="java"%> <%@ page import="java.sql.*"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional/

  • aop的实现原理_动力节点Java学院整理

    面向方面编程(Aspect Oriented Programming,简称AOP)是一种声明式编程(Declarative Programming).声明式编程是和命令式编程(Imperative Programming)相对的概念.我们平时使用的编程语言,比如C++.Java.Ruby.Python等,都属命令式编程.命令式编程的意思是,程序员需要一步步写清楚程序需要如何做什么(How to do What).声明式编程的意思是,程序员不需要一步步告诉程序如何做,只需要告诉程序在哪些地方做什么

  • java操作mongoDB查询的实例详解

    java操作mongo查询的实例详解 前言: MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型.Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且

  • BackBone及其实例探究_动力节点Java学院整理

    MVC简介 基本介绍 MVC即模型(Model),视图(View)和控制(Controller),旨在实现Web系统的职能分工,具体来说就是使业务逻辑和数据显示分离. 在MVC中,视图(View)为用户提供交互,模型(Model)负责处理数据和业务逻辑,控制器(Controller)则是View与Model之间沟通的桥梁. MVC一个很重要的标志就是,视图(View)与模型(Model)没有直接的交互,而是通过控制器(Controller)来沟通.具体地:用户通过View进行输入,Control

  • Java 正则表达式详解

    如果你不熟悉这个术语,那么"正则表达式"(Regular Expression)就是一个字符构成的串,它定义了一个用来搜索匹配字符串的模式. 正则表达式30分钟入门教程 常用正则表达式 许多语言,包括Perl.PHP.Python.JavaScript和JScript,都支持用正则表达式处理文本,一些文本编辑器用正则表达式实现高级"搜索-替换"功能.那么Java又怎样呢?本文写作时,一个包含了用正则表达式进行文本处理的Java规范需求(Specification R

随机推荐