导航:首页 > 编程语言 > java图片叠加

java图片叠加

发布时间:2024-12-08 01:43:49

‘壹’ 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中怎样在panel中同时设置几张图片(并且可以重叠)

自已实现一个类,该类继承自JPanel类,然后复写里面的paintComponent(Graphics g)方法,在这个方法里面作如下操作:

Graphics2D gfx = (Graphics2D) g;

gfx.drawImage(img1, ...);

gfx.drawImage(img2, ...);


  1. 关于drawImage(...)如何使用,可以参见Java API文档,该接口有好几个变种,你可以选择适合自己要求的哪一个;

  2. 另外,你还可以设置图片之间的叠加效果,使用Java2D里面的AlphaComposite,然后再drawImage(...)之前调用gfx.setPaint(AlphaComposite paint)即可;


希望上述提示可以帮到你,谢谢~

‘叁’ java实现多个tif文件图片拼接

publicstaticvoidmany2one(List<String>bookFilePaths,StringtoPath,StringdistFileName){
if(bookFilePaths!=null&&bookFilePaths.size()>0){
File[]files=newFile[bookFilePaths.size()];
for(inti=0;i<bookFilePaths.size();i++){
files[i]=newFile(bookFilePaths.get(i));
}
if(files!=null&&files.length>0){

try{
ArrayListpages=newArrayList(files.length-1);
FileSeekableStream[]stream=newFileSeekableStream[files.length];
for(inti=0;i<files.length;i++){
stream[i]=newFileSeekableStream(
files[i].getCanonicalPath());
}
ParameterBlockpb=(newParameterBlock());
PlanarImagefirstPage=JAI.create("stream",stream[0]);
for(inti=1;i<files.length;i++){
PlanarImagepage=JAI.create("stream",stream[i]);
pages.add(page);

}
TIFFEncodeParamparam=newTIFFEncodeParam();
Filef=newFile(toPath);
if(!f.exists()){
f.mkdirs();
}
OutputStreamos=newFileOutputStream(toPath+File.separator+distFileName);
ImageEncoderenc=ImageCodec.createImageEncoder("tiff",
os,param);
param.setExtraImages(pages.iterator());
enc.encode(firstPage);
for(inti=0;i<files.length;i++){
stream[i].close();
if(files[i].isFile()&&files[i].exists()){
files[i].delete();
}
}
os.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}

阅读全文

与java图片叠加相关的资料

热点内容
解压玩具创意图片 浏览:525
组态软件pdf 浏览:484
箍筋加密区是如何计算根数的 浏览:852
笔记本如何服务器从做raid 浏览:929
视频编解码算法工程师 浏览:587
手机上服务器怎么找 浏览:323
抖音程序员变装男 浏览:338
qd128y压缩机参数 浏览:834
解压棒的视频 浏览:145
linux下kill命令 浏览:346
服务器和网络机柜有什么重要 浏览:349
贴吧文件夹位置图片 浏览:506
python读取处理二进制文件 浏览:398
亿速云北京三区云服务器 浏览:566
高管绿程序员 浏览:43
萝卜影视APP源码推荐设置教程 浏览:783
小米官方包被加密 浏览:884
程序员的午饭视频 浏览:289
雅思听力pdf 浏览:359
高跟鞋先生程序员 浏览:59