正好写了一个,给你看看哈
import?java.awt.*;
import?java.awt.image.BufferedImage;
import?java.io.File;
import?java.util.Date;
import?javax.imageio.ImageIO;
public?class?ScreenCapturer?{
public?static?void?main(String[]?args)?throws?Exception{
Date?date?=?new?Date();
Robot?rbt?=?new?Robot();
File?file?=?new?File("d://"◆?date.toString().replace("?","").replace(":","")◆".jpg");?//这是保存路径D盘根目录
ImageIO.write(bf,"jpg",file);
System.out.println("截图成功!保存于D盘根目录下!时间:"?◆?date.toString());
}
图像无缩放?
这个就是个算法的问题吧,你就直接根据多少行多少列,挨个给像素点赋值啊.不过要求原始图像大小相同吧.
这是以段绘制水印的程序 还有透明效果 水印上去的就是一张图片 你应该看的懂
/**
* @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就加水印
try {
String waterImgPath = UtilityPropKit.getProp("waterImgPath");
BufferedImage water = ImageIO.read(new File(base ◆ waterImgPath)); //水印
// 水印长度
int waWidth = water.getWidth();
// 水印高度
int waHeight = water.getHeight();
//根据源图片尺寸,产生目标图片
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//绘制源图
graph.drawImage(image, 0, 0, width, height, null);
//在已经绘制的图片中加入透明度通道
//绘制水印
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;
用css样式定义图片的宽度和高度;但是这也需要看你图片的格式,图片定义宽度和高度后会失贞,建议采用gif格式的图片.
之前有做过图片合成视频的功能,大概代码就是这样,你可以看一下
* 图片合成视频
* @param imageDir 图片地址
* @param rate 这个可以理解成视频每秒播放图片的数量
*/
FFmpegFrameRecorder recorder = null;
boolean flag = true;
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();
* 这个方法主要是防止图片比例达不到视频合成比例的要求,如果达不到下面条件视频则会无法播放
int [] maxWH = getImgMaxWH(widthArray,heightArray);
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) {
flag = false;
logger.error("合成失败");
} finally {
if (recorder != null){
recorder.stop();
recorder.release();
} catch (FrameRecorder.Exception e) {
return flag;
Image image1 = ImageIO.read(new File(fileurl1));
BufferedImage bufferedimage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);// 构造一个内存图片
bufferedimage.getGraphics().drawImage(image1, 0, 0, width, height, 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()); //写到浏览器
大概方向就是这样,把图片放到内存中,然后绘制内存图片,把他们包含进去,然后把内存图片返回.
我乱改的,不能跑的.前不久刚做过
你可以试试
==========================================
以上就是土嘎嘎小编为大家整理的java代码合成图片相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!