【JAVA】Graphics2D实现图片的裁剪、旋转、翻转

Graphics2D实现图片的裁剪、旋转、翻转

裁剪

以一张250x125的图片为例

File tempImgFile = new File("C:\\Users\\cjyou\\Desktop\\input.jpg");//250x125
int dataX = 0;//起始点的X坐标
int dataY = 0;//起始点的Y坐标
int cropWidth = 200;//裁剪后的宽
int cropHeight = 100;//裁剪后的高
BufferedImage originalImage = ImageIO.read(tempImgFile);
BufferedImage croppedImage = new BufferedImage(cropWidth, cropHeight, originalImage.getType());
Graphics2D g2d = croppedImage.createGraphics();
//int dx1, int dy1, int dx2, int dy2	:	(dx1,dy1)表示左上角的点 (dx2,dy2)表示右下角的点
//0,0, cropWidth,cropHeight
//int sx1, int sy1, int sx2, int sy2	:	(dx1,dy1)表示左上角的点 (dx2,dy2)表示右下角的点
//dataX,dataY, dataX+cropWidth,dataY+cropHeight
g2d.drawImage(originalImage, 0, 0, cropWidth, cropHeight, dataX, dataY, dataX+cropWidth, dataY+cropHeight, null);
g2d.dispose();

File tempOutImg = new File("C:\\Users\\cjyou\\Desktop\\output.jpg");
if (!tempOutImg.exists()) {
   tempOutImg.createNewFile();
}
ImageIO.write(croppedImage, "jpg", tempOutImg);

解释:
1、有一块长200宽100的画布,在画布的点(dx1,dy1),点(dx2,dy2)形成的矩形区域A
2、将原图中的点(dataX,dataY),点(dataX+cropWidth,dataY+cropHeight)形成的矩形, drawImage到区域A中


旋转

File tempImgFile = new File("C:\\Users\\cjyou\\Desktop\\input.jpg");//250x125
int dataX = 0;//起始点的X坐标
int dataY = 0;//起始点的Y坐标
int cropWidth = 250;//裁剪后的宽
int cropHeight = 125;//裁剪后的高
BufferedImage originalImage = ImageIO.read(tempImgFile);
BufferedImage croppedImage = new BufferedImage(cropWidth, cropHeight, originalImage.getType());
Graphics2D g2d = croppedImage.createGraphics();
g2d.rotate(Math.toRadians(5),cropWidth/2,cropHeight/2);
g2d.drawImage(originalImage, 0, 0, cropWidth, cropHeight, dataX, dataY, dataX+cropWidth, dataY+cropHeight, null);
g2d.dispose();

File tempOutImg = new File("C:\\Users\\cjyou\\Desktop\\output.jpg");
if (!tempOutImg.exists()) {
	tempOutImg.createNewFile();
}
ImageIO.write(croppedImage, "jpg", tempOutImg);

解释:
1、g2d.rotate(Math.toRadians(5)); 指以坐标点(0,0)也就是左上角,顺时针旋转5度
2、g2d.rotate(Math.toRadians(5),cropWidth/2,cropHeight/2); 指以图片中心点(125,62.5)也就是图片中心,顺时针旋转5度


水平翻转

File tempImgFile = new File("C:\\Users\\cjyou\\Desktop\\input.jpg");//250x125
int dataX = 0;//起始点的X坐标
int dataY = 0;//起始点的Y坐标
int cropWidth = 250;//裁剪后的宽
int cropHeight = 125;//裁剪后的高
BufferedImage originalImage = ImageIO.read(tempImgFile);
BufferedImage croppedImage = new BufferedImage(cropWidth, cropHeight, originalImage.getType());
Graphics2D g2d = croppedImage.createGraphics();
g2d.translate(cropWidth,0);
g2d.scale(-1,1);//水平翻转
g2d.drawImage(originalImage, 0, 0, cropWidth, cropHeight, dataX, dataY, dataX+cropWidth, dataY+cropHeight, null);
g2d.dispose();

File tempOutImg = new File("C:\\Users\\cjyou\\Desktop\\output.jpg");
if (!tempOutImg.exists()) {
	tempOutImg.createNewFile();
}
ImageIO.write(croppedImage, "jpg", tempOutImg);

垂直翻转

File tempImgFile = new File("C:\\Users\\cjyou\\Desktop\\input.jpg");//250x125
int dataX = 0;//起始点的X坐标
int dataY = 0;//起始点的Y坐标
int cropWidth = 250;//裁剪后的宽
int cropHeight = 125;//裁剪后的高
BufferedImage originalImage = ImageIO.read(tempImgFile);
BufferedImage croppedImage = new BufferedImage(cropWidth, cropHeight, originalImage.getType());
Graphics2D g2d = croppedImage.createGraphics();
g2d.translate(0,cropHeight);
g2d.scale(1,-1);
g2d.drawImage(originalImage, 0, 0, cropWidth, cropHeight, dataX, dataY, dataX+cropWidth, dataY+cropHeight, null);
g2d.dispose();

File tempOutImg = new File("C:\\Users\\cjyou\\Desktop\\output.jpg");
if (!tempOutImg.exists()) {
	tempOutImg.createNewFile();
}
ImageIO.write(croppedImage, "jpg", tempOutImg);
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尤成军军军

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值