「java合成多张图片」java 合成图片

博主:adminadmin 2023-03-17 13:52:08 242

今天给各位分享java合成多张图片的知识,其中也会对java 合成图片进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

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

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拼接。其中那个私有方法是我处理两张图片的左上角坐标的。这里就不贴了。实际上我的做法就是取出两个图片,然后重新绘制。做法比较笨,希望抛砖引玉吧。同理,图片覆盖也是用这个,只是两图片的坐标发生变发。

在JAVA里如何将三张同样的图片做成一张竖排的?

package test;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

public class CompositeImage {

public static void main(String[] args) throws IOException {

String filePath = "D:\\a.jpg";

BufferedImage bimage = ImageIO.read(new File(filePath));

int width = bimage.getWidth();

int height = bimage.getHeight();

int imageNum = 3; //三个汉堡

//不一定是TYPE_INT_RGB,可以看API自己需要哪种格式

BufferedImage outImage = new BufferedImage(width, height * imageNum, BufferedImage.TYPE_INT_RGB);

Graphics g = outImage.getGraphics();

Graphics2D g2d = (Graphics2D) g;

for(int i=0; iimageNum; i++)

{

g2d.drawImage(bimage, 0, height * i, null);

//需要改变颜色的话在这里绘上颜色。可能会用到AlphaComposite类

}

String outPath = "D:\\b.jpg";

String format = "JPG";

ImageIO.write(outImage, format, new File(outPath));

}

}

不知道我理解的对不对。。。

不需要改变颜色的话不就是这个效果吗?FileChooser自己写就好了啊。只是路径而已。

java 如何将多张JPG图片合成视频文件,比如:avi格式 或 mpg格式.

之前有做过图片合成视频的功能,大概代码就是这样,你可以看一下

/**

* 图片合成视频

* @param mp4SavePath 视频保存路径

* @param imageDir 图片地址

* @param rate 这个可以理解成视频每秒播放图片的数量

*/

public static boolean jpgToMp4(String mp4SavePath, String imageDir, double rate) {

FFmpegFrameRecorder recorder = null;

boolean flag = true;

try {

File[] files = FileUtils.fileSort(imageDir);

int [] widthArray = new int[files.length];

int [] heightArray = new int[files.length];

/**

* 获取合成视频图片的最大宽高,避免图片比例不一致最终合成效果差

*/

for (int i = 0; i files.length; i++) {

BufferedImage bufferedImage = ImageIO.read(files[i]);

widthArray[i] = bufferedImage.getWidth();

heightArray[i] = bufferedImage.getHeight();

}

/**

* 这个方法主要是防止图片比例达不到视频合成比例的要求,如果达不到下面条件视频则会无法播放

* 图片宽:必须要被32整除

* 图片高:必须要被2整除

*/

int [] maxWH = getImgMaxWH(widthArray,heightArray);

recorder = new FFmpegFrameRecorder(mp4SavePath,maxWH[0],maxWH[1]);

recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);

/**

* 视频质量:目前测试出来的是25-30最清晰,视频质量范围好像是0-40,具体可以自己慢慢测

*/

recorder.setVideoQuality(25);

recorder.setFormat("mp4");

recorder.setFrameRate(rate 0 ? rate : 1);

recorder.setPixelFormat(0);

recorder.start();

OpenCVFrameConverter.ToIplImage conveter = new OpenCVFrameConverter.ToIplImage();

/**

* 合成视频

*/

for(int i = 0; i files.length; i++ ){

opencv_core.IplImage image = cvLoadImage(files[i].getPath());

recorder.record(conveter.convert(image));

opencv_core.cvReleaseImage(image);

}

logger.info("合成成功");

} catch(Exception e) {

e.printStackTrace();

flag = false;

logger.error("合成失败");

} finally {

try {

if (recorder != null){

recorder.stop();

recorder.release();

}

} catch (FrameRecorder.Exception e) {

e.printStackTrace();

}

}

return flag;

}

java实现多张图片合成一张tif图片 RenderedImage[] imgs(多张图片), String path(保存路径)

public static void many2one(ListString bookFilePaths, String toPath,String distFileName) {

if (bookFilePaths != null bookFilePaths.size() 0) {

File[] files = new File[bookFilePaths.size()];

for(int i = 0; i bookFilePaths.size(); i++){

files[i] = new File(bookFilePaths.get(i));

}

if (files != null files.length 0) {

try {

ArrayList pages = new ArrayList(files.length - 1);

FileSeekableStream[] stream = new FileSeekableStream[files.length];

for (int i = 0; i files.length; i++) {

stream[i] = new FileSeekableStream(

files[i].getCanonicalPath());

}

ParameterBlock pb = (new ParameterBlock());

PlanarImage firstPage = JAI.create("stream", stream[0]);

for (int i = 1; i files.length; i++) {

PlanarImage page = JAI.create("stream", stream[i]);

pages.add(page);

}

TIFFEncodeParam param = new TIFFEncodeParam();

boolean f = makeDirs(toPath);

System.out.println(f);

OutputStream os = new FileOutputStream(toPath + File.separator+ distFileName);

ImageEncoder enc = ImageCodec.createImageEncoder("tiff",

os, param);

param.setExtraImages(pages.iterator());

enc.encode(firstPage);

for (int i = 0; i files.length; i++) {

stream[i].close();

}

os.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

jsp(java /html/javascript) 中有没有将两张图片合成一张图片的方法啊

Image image1 = ImageIO.read(new File(fileurl1));

Image image2 = ImageIO.read(new File(fileurl2));

int width = image.getWidth(5000);// 得到图片的长,宽

int height = image.getHeight(5000);

BufferedImage bufferedimage = new BufferedImage(width, height,

BufferedImage.TYPE_INT_RGB);// 构造一个内存图片

bufferedimage.getGraphics().drawImage(image1, 0, 0, width, height, null); // 将本地图片画入到内存图片

bufferedimage.getGraphics().drawImage(image2, 0, 0, image1.getWidth, image1.getHeight, null);

response.setContentType("image/jpeg");// 设置返回头部

response.setHeader("Pragma", "No-cache");

response.setHeader("Cache-Control", "no-cache");

response.setDateHeader("Expires", 0);

ImageIO.write(bufferedimage, "JPEG", response.getOutputStream()); //写到浏览器

大概方向就是这样,把图片放到内存中,然后绘制内存图片,把他们包含进去,然后把内存图片返回。

我乱改的,不能跑的。前不久刚做过

你可以试试

==========================================

几张图放一起没试过,你可以试试在绘了一张后,接着会第2张,他们的开始地点相同,看会不会被覆盖

关于java合成多张图片和java 合成图片的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。