这周末老师要求做一个藏宝图效果的图片io测试,所要求的效果是首先给你四张已经由ps处理过的图片,这几种图片为该藏宝图所截取的四张图。
以下为所提供的四张图片:
1.jpg
2.jpg
3.jpg
4.jpg
最终希望合成的效果:
附上代码:
package com.hcj.july19.am;
//导入需要的包
import java.io.*;
import java.io.File;
import java.io.FileOutputStream;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
/*
* 当导入一下这两个包时,MyEclipse会报错:
* Access restriction: The type JPEGImageEncoder is not accessible due to
restriction on required library C:\Java\jre1.6.0_07\lib\rt.jar
* 解决方法
* Eclipse默认把这些受访问限制的API设成了ERROR。
* 只要把Windows-Preferences-Java-Complicer-Errors/Warnings里面的
* Deprecated and restricted API中的Forbidden references(access rules)选为Warning就可以编译通过。
*/
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class ImageTest {
public ImageTest() {}
public static void main(String[] args) {
try {
ImageTest test = new ImageTest();
test.ImageTset();
} catch (Exception e) {
System.out.print(e);
}
}
public void ImageTset() throws Exception {
//创建四个文件对象(注:这里四张图片的宽度都是相同的,因此下文定义BufferedImage宽度就取第一只的宽度就行了)
File _file1 = new File("1.jpg");
File _file2 = new File("2.jpg");
File _file3 = new File("3.jpg");
File _file4 = new File("4.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);
//获取图片的宽度
int width = src1.getWidth(null);
//获取各个图像的高度
int height1 = src1.getHeight(null);
int height2 = src2.getHeight(null);
int height3 = src3.getHeight(null);
int height4 = src4.getHeight(null);
//构造一个类型为预定义图像类型之一的 BufferedImage。 宽度为第一只的宽度,高度为各个图片高度之和
BufferedImage tag = new BufferedImage(width, height1 + height2 + height3 + height4, BufferedImage.TYPE_INT_RGB);
//创建输出流
FileOutputStream out = new FileOutputStream("treasureMap.jpg");
//绘制合成图像
Graphics g = tag.createGraphics();
g.drawImage(src1, 0, 0, width, height1, null);
g.drawImage(src2, 0, height1, width , height2, null);
g.drawImage(src3, 0, height1 + height2, width, height3, null);
g.drawImage(src4, 0, height1 + height2 + height3, width, height4, null);
// 释放此图形的上下文以及它使用的所有系统资源。
g.dispose();
//将绘制的图像生成至输出流
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag);
//关闭输出流
out.close();
System.out.println("藏宝图出来了");
}
}
测试通过,各个图片连接正常,无断层现象
备注:上述里有说到导入JPEGCodec和JPEGImageEncoder时 在eclipse里会报错(这里特别说明下,这个只是eclipse的提示,不影响程序的运行)
这边看了下评论里有同学说到这个问题,我这边演示下。
1.设置之前,代码飘红。
2.鼠标挪到飘红部分,会出现提示窗口,点击下面的链接处
3.出现以下界面,点击apply,然后点击ok
4.设置完成