java图片合成
A. 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;
}
B. 请问用Java 怎样实现抠图功能。比如图片是一块石头放在一张纸上,怎样
1、用ps打开两张图片。
2、在工具里选择“移动工具”,按住鼠标左键把第二个图片拖动到第一个图片里。由于第二张的像素有点大,所以会把原来的图片覆盖住的,通过鼠标稍微移动一下。
3、按ctrl+t(自由变换快捷键),图片的四周出现了可以调节的横线,按住shift拖动图片的一个角可以进行等比例缩放,这张图太大了,所以等比例缩小一点。调整为合适的大小,放到合适的地方。调整完毕,按enter键确认。
4、在右下角的图层面板里点击第三个按钮(添加矢量蒙板),为第二个图层添加一个蒙板。
5、可以看到在“工具”里,前景色和背景色默认修改为了白色和黑色。
6、然后选择工具里的“渐变”工具。可以看到,上方工具栏出现了渐变的一些设置。因为前景色为白色,背景色为黑色,所以默认是白色到黑色的渐变条。后面分别设置为径向渐变,正常模式,百分之百不透明度,反向不打勾。
7、点击白色到黑色的渐变条,进入渐变编辑器。
8、把左侧下方的白色滑块拖到中间,可以在下方的位置处直接填写百分之50。
9、把鼠标放在左侧的滑动条下方,会出现“点按可添加色标”。
10、点击一下,出现一个新的色块,为白色。把它拖动到最左边,可以直接填写百分之0。
11、选中最左边的白色色块,点击一下下面的颜色后面的白色,弹出“选择色标颜色”的窗口。在里面选择纯黑色。点击“确定”。这样就把白色改成了黑色。渐变色变成了黑-白-黑。点击“确定”。
12、可以看到上面确实变成了黑色-白色-黑色渐变。
13、一只手按住shift键,一只手按住鼠标左键在图片上拉出一条直线(按住shift键是保证水平)。
14、松开手,蒙板就起作用了,这是利用了蒙板状态下,黑色隐藏,白色显示的特点。
15、然后稍加修饰。选择工具里的“矩形选框工具”,选中要裁剪的部分。
16、点击“图像”,选择“裁剪”。
17、图片被裁剪,裁剪完成后按ctrl+d取消选中状态,或者可以点击右键,选择“取消”。
18、、这样就实现了两张图片的合成。利用蒙板和渐变色合成的方式的好处是第二个图片可以保留一部分的背景,有一种融入的感觉。如果采用抠图合并的方法,一般是给人物换背景图,技术要求比较高。
C. Java编写时,能不能像PS一样对图片进行修图或合成呀
不可以的,但是可以先使用Ps等图片处理工具将图片美化好后,再使用java进行编写。