java如何将多张图片连接成一张图片

java如何将多张图片连接成一张图片,第1张

Image bgImage

Image fgImage

try {

bgImage = ImageIO.read(bgImageFile)

fgImage = ImageIO.read(fgImageFile)

int bgWidth = bgImage.getWidth(null)

int bgHeight = bgImage.getHeight(null)

int fgWidth = fgImage.getWidth(null)

int fgHeight = fgImage.getHeight(null)

// 此类叫SpliceImages,这个方法是静态方法,所以实例化慎桐庆一下

// 后面的这个对象的属性是自定义的类成员。

SpliceImages spliceImages = new SpliceImages()

// 私有方法

spliceImages.parsePosition(position, bgWidth, bgHeight, fgWidth, fgHeight)

// 生成新图片的长、宽,后面那个是色彩模式

BufferedImage bufferedImage = new BufferedImage(spliceImages.WIDTH, spliceImages.HEIGHT, BufferedImage.TYPE_INT_RGB)

Graphics graphics = bufferedImage.createGraphics()

// 绘制背景图片

graphics.drawImage(bgImage, spliceImages.bgX, spliceImages.bgY, null)

// 绘制前景图片

graphics.drawImage(fgImage, spliceImages.fgX, spliceImages.fgY, null)

graphics.dispose()

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output)

encoder.encode(bufferedImage)

output.close()

} catch (IOException e) {

e.printStackTrace()

}

这个是我做图表时写的,整个类中定义了很多重载方法,所以不全贴了。由于用的FusionCharts3.1,单系列图表没有图例,为了处理导出图片,就自制图例,然后用java拼接。其中那个私有方法是我处理两张图片的左上角坐轮枝标的。这里就不贴了。实际上我的做法就是取出两个图片,然后重新绘制。做法比较笨,希望抛砖引玉宽握吧。同理,图片覆盖也是用这个,只是两图片的坐标发生变发。

package love

import java.awt.*

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import java.util.Random

import javax.swing.*

public class Games extends JFrame implements ActionListener {

private JButton buttons[][]// 存储按键的数组

private Container container// 一个容器

private GridLayout layout// 布局方式为GridLayout

private int count = 0, is[] = new int[8]// count的作用是计算按键移动的次数,is[]储存一个随机产生的1到8数字数组

public Games() {

super("拼图游戏")// 设置标题

layout = new GridLayout(3, 3)// 3行3列

container = getContentPane()// 该容器的布局方式,及其重要,否则产生空引用异常

container.setLayout(layout)// 将该布局方式作用于容器

buttons = new JButton[3][3]// 给按键数组分谨做配储存空间

int locate1, locate2// locate1用来指示当前产生的元素 locate2用来指示locate1之前的元素

for (locate1 = 0locate1 <8locate1++) {// 该方法作用是产生1到8这8个数,随机分配给数组,即无序排列

int g = new Random().nextInt(8) + 1// 随机产生一个空白按键,即不显示的那个

is[locate1] = g

for (locate2 = locate1 - 10 <= locate2locate2--) {

if (is[locate1] == is[locate2])

break

}

if (locate2 != -1)

locate1--

}

int temp = 0

int r = new Random().nextInt(3)// 随机产生一个0到3的数,代表空白按键的行

int l = new Random().nextInt(3)// 随机产生祥态衡一个0到3的数,代表空白按键的列

for (int i = 0i <3i++) {

for (int j = 0j <3j++) {

if (r == i &&l == j) {// 空白按键设置为9,不显示

buttons[i][j] = new JButton("9")

container.add(buttons[i][j])

buttons[i][j].setVisible(false)

} else {

buttons[i][j] = new JButton("" + is[temp++])// 将数组数组的值作为显示的8个按键的名字

container.add(buttons[i][j])

}

buttons[i][j].addActionListener(this)// 注册监听事件

}

}

setSize(300, 300)// 设置显示容器区域闭慧大小

setVisible(true)

}

public void actionPerformed(ActionEvent event) {// 事件处理,由于计算量小该处将所有按键单独分析

JButton b = (JButton) event.getSource()

if (b == buttons[0][0]) {

if (buttons[0][1].getText().equals("9")) {

buttons[0][1].setText("" + buttons[0][0].getText())

buttons[0][1].setVisible(true)

buttons[0][0].setText("9")

buttons[0][0].setVisible(false)

count++

} else if (buttons[1][0].getText().equals("9")) {

buttons[1][0].setText("" + buttons[0][0].getText())

buttons[1][0].setVisible(true)

buttons[0][0].setText("9")

buttons[0][0].setVisible(false)

count++

}

}

else if (b == buttons[0][1]) {

if (buttons[0][0].getText().equals("9")) {

buttons[0][0].setText("" + buttons[0][1].getText())

buttons[0][0].setVisible(true)

buttons[0][1].setText("9")

buttons[0][1].setVisible(false)

count++

} else if (buttons[0][2].getText().equals("9")) {

buttons[0][2].setText("" + buttons[0][1].getText())

buttons[0][2].setVisible(true)

buttons[0][1].setText("9")

buttons[0][1].setVisible(false)

count++

} else if (buttons[1][1].getText().equals("9")) {

buttons[1][1].setText("" + buttons[0][1].getText())

buttons[1][1].setVisible(true)

buttons[0][1].setText("9")

buttons[0][1].setVisible(false)

count++

}

} else if (b == buttons[0][2]) {

if (buttons[0][1].getText().equals("9")) {

buttons[0][1].setText("" + buttons[0][2].getText())

buttons[0][1].setVisible(true)

buttons[0][2].setText("9")

buttons[0][2].setVisible(false)

count++

} else if (buttons[1][2].getText().equals("9")) {

buttons[1][2].setText("" + buttons[0][2].getText())

buttons[1][2].setVisible(true)

buttons[0][2].setText("9")

buttons[0][2].setVisible(false)

count++

}

} else if (b == buttons[1][0]) {

if (buttons[0][0].getText().equals("9")) {

buttons[0][0].setText("" + buttons[1][0].getText())

buttons[0][0].setVisible(true)

buttons[1][0].setText("9")

buttons[1][0].setVisible(false)

count++

} else if (buttons[1][1].getText().equals("9")) {

buttons[1][1].setText("" + buttons[1][0].getText())

buttons[1][1].setVisible(true)

buttons[1][0].setText("9")

buttons[1][0].setVisible(false)

count++

} else if (buttons[2][0].getText().equals("9")) {

buttons[2][0].setText("" + buttons[1][0].getText())

buttons[2][0].setVisible(true)

buttons[1][0].setText("9")

buttons[1][0].setVisible(false)

count++

}

} else if (b == buttons[1][1]) {

if (buttons[0][1].getText().equals("9")) {

buttons[0][1].setText("" + buttons[1][1].getText())

buttons[0][1].setVisible(true)

buttons[1][1].setText("9")

buttons[1][1].setVisible(false)

count++

} else if (buttons[1][0].getText().equals("9")) {

buttons[1][0].setText("" + buttons[1][1].getText())

buttons[1][0].setVisible(true)

buttons[1][1].setText("9")

buttons[1][1].setVisible(false)

count++

} else if (buttons[1][2].getText().equals("9")) {

buttons[1][2].setText("" + buttons[1][1].getText())

buttons[1][2].setVisible(true)

buttons[1][1].setText("9")

buttons[1][1].setVisible(false)

count++

} else if (buttons[2][1].getText().equals("9")) {

buttons[2][1].setText("" + buttons[1][1].getText())

buttons[2][1].setVisible(true)

buttons[1][1].setText("9")

buttons[1][1].setVisible(false)

count++

}

} else if (b == buttons[1][2]) {

if (buttons[0][2].getText().equals("9")) {

buttons[0][2].setText("" + buttons[1][2].getText())

buttons[0][2].setVisible(true)

buttons[1][2].setText("9")

buttons[1][2].setVisible(false)

count++

} else if (buttons[2][2].getText().equals("9")) {

buttons[2][2].setText("" + buttons[1][2].getText())

buttons[2][2].setVisible(true)

buttons[1][2].setText("9")

buttons[1][2].setVisible(false)

count++

} else if (buttons[1][1].getText().equals("9")) {

buttons[1][1].setText("" + buttons[1][2].getText())

buttons[1][1].setVisible(true)

buttons[1][2].setText("9")

buttons[1][2].setVisible(false)

count++

}

} else if (b == buttons[2][0]) {

if (buttons[1][0].getText().equals("9")) {

buttons[1][0].setText("" + buttons[2][0].getText())

buttons[1][0].setVisible(true)

buttons[2][0].setText("9")

buttons[2][0].setVisible(false)

count++

} else if (buttons[2][1].getText().equals("9")) {

buttons[2][1].setText("" + buttons[2][0].getText())

buttons[2][1].setVisible(true)

buttons[2][0].setText("9")

buttons[2][0].setVisible(false)

count++

}

}

else if (b == buttons[2][1]) {

if (buttons[2][0].getText().equals("9")) {

buttons[2][0].setText("" + buttons[2][1].getText())

buttons[2][0].setVisible(true)

buttons[2][1].setText("9")

buttons[2][1].setVisible(false)

count++

} else if (buttons[2][2].getText().equals("9")) {

buttons[2][2].setText("" + buttons[2][1].getText())

buttons[2][2].setVisible(true)

buttons[2][1].setText("9")

buttons[2][1].setVisible(false)

count++

} else if (buttons[1][1].getText().equals("9")) {

buttons[1][1].setText("" + buttons[2][1].getText())

buttons[1][1].setVisible(true)

buttons[2][1].setText("9")

buttons[2][1].setVisible(false)

count++

}

} else if (b == buttons[2][2]) {

if (buttons[2][1].getText().equals("9")) {

buttons[2][1].setText("" + buttons[2][2].getText())

buttons[2][1].setVisible(true)

buttons[2][2].setText("9")

buttons[2][2].setVisible(false)

count++

} else if (buttons[1][2].getText().equals("9")) {

buttons[1][2].setText("" + buttons[2][2].getText())

buttons[1][2].setVisible(true)

buttons[2][2].setText("9")

buttons[2][2].setVisible(false)

count++

}

}

if (buttons[0][0].getText().equals("1")// 假如1到8已经排列完成,则执行该语句

&&buttons[0][1].getText().equals("2")

&&buttons[0][2].getText().equals("3")

&&buttons[1][0].getText().equals("4")

&&buttons[1][1].getText().equals("5")

&&buttons[1][2].getText().equals("6")

&&buttons[2][0].getText().equals("7")

&&buttons[2][1].getText().equals("8")) {

JOptionPane.showMessageDialog(null, "您一共花费了" + count + "步完成了游戏!")// d出对话框,显示共移动步数

System.exit(0)// 退出程序

}

}

public static void main(String[] args) {

Games game = new Games()

game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

}

}

这是以段绘制水印的程序还有察族透明效果 水印上去的就是一张图片 你应该看的懂

/**

* @see 绘制水印

* @param base 根目录

* @param file 图塌局片文件

* @param image 图片源

* @param width 图片宽度

* @param height 图片高度

* */

private boolean printWater(String base, File file, BufferedImage image, int width, int height){

String fileName = file.getName()

String extend = fileName.substring(fileName.lastIndexOf(".") + 1)

//如果图片不是gif类型,并且图片小于1M就加水印

if(!"gif".toLowerCase().equals(extend) &&file.length() <= 1024 * 1024){

try {

String waterImgPath = UtilityPropKit.getProp("waterImgPath")

BufferedImage water = ImageIO.read(new File(base + waterImgPath)) //水印

// 水印长度

int waWidth = water.getWidth()

// 水印高度

int waHeight = water.getHeight()

if(height >waHeight * 2 &&width >waWidth * 2){

//根据源图片尺寸,产生目标图片

BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB)

//获取Graphics2D

Graphics2D graph = img.createGraphics()

//绘制源图

graph.drawImage(image, 0, 0, width, height, null)

//团没让在已经绘制的图片中加入透明度通道

graph.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.5f))

//绘制水印

graph.drawImage(water, 0, height-waHeight, waWidth, waHeight, null)

//释放对象

graph.dispose()

//保存文件

ImageIO.write(img, extend, file)

}

return true

} catch (Exception e) {

e.printStackTrace()

}

}

return false

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12382747.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存