String path = "D:\\Downloads\\777.jpg";
String pos = "100_100_100_100";
String [] posArr = pos.split("_");
Integer[] intArray = Convert.toIntArray(posArr);
File file = new File(path);
BufferedImage image = ImageIO.read(file);
Graphics g = image.getGraphics();
// 获取 Graphics 对象并强制转换为 Graphics2D 对象
Graphics2D g2d = (Graphics2D) g;
// 设置线条粗细为 2f
g2d.setStroke(new BasicStroke(4f));
g.setColor(Color.GREEN);//画笔颜色
g.drawRect(intArray[0],intArray[1],intArray[2],intArray[3]);//矩形框(原点x坐标,原点y坐标,矩形的长,矩形的宽)
//g.dispose();
//方法1.生成图片-压缩
FileOutputStream out1 = new FileOutputStream(file.getParentFile().getAbsolutePath() + File.separator + "777_new1.jpg");//输出图片的地址
// 此处直接write会导致图片被压缩处理,失真
ImageIO.write(image, "jpeg", out1);
//方法2.生成图片-不压缩
// 所以经过以下处理,可以调整相应的参数,甚至可以生成大于原图的图片
Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("jpeg");
if (iter.hasNext()) {
ImageWriter writer = iter.next();
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
// 该参数在0.92~0.93左右是最接近原图大小的,最大是1
param.setCompressionQuality(1f);
FileImageOutputStream out = new FileImageOutputStream(new File(
file.getParentFile().getAbsolutePath() + File.separator + "777_new2.jpg"));
writer.setOutput(out);
// writer.write(bi);
writer.write(null, new IIOImage(image, null, null), param);
out.close();
writer.dispose();
}
//方法3.生成图片-不压缩
FileOutputStream out = new FileOutputStream(file.getParentFile().getAbsolutePath() + File.separator + "777_new3.jpg");//目标路径
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param=encoder.getDefaultJPEGEncodeParam(image);//imgBuff 添加水印后的图片
param.setQuality(1, true);//设置质量
encoder.encode(image, param);
out.close();
//截图
int width = image.getWidth();
int height = image.getHeight();
if(width<intArray[0]){
return;
}
if(height<intArray[1]){
return;
}
//参数依次为,截取起点的x坐标,y坐标,截取宽度,截取高度
BufferedImage pic2 = image.getSubimage(intArray[0],intArray[1],intArray[2],intArray[3]);
//将截取的子图另行存储
File desImage = new File(file.getParentFile().getAbsolutePath() + File.separator + "777_screenshot.jpg");
ImageIO.write(pic2, "jpeg", desImage);
【Java】图片画框、截图
最新推荐文章于 2024-04-25 17:37:08 发布