java 图片路径裁剪图片,Java中实现图片的裁剪

我们将通过以下步骤来学习:

输入图像,指定要处理的图像路径

允许用户拖放要剪裁的部分

选择后使用 Robot 类来确定剪裁部分的坐标

剪裁所选图像并保持

代码由两个文件组成,一个是ImagePanel.java,另外一个文件是CopyImage.java。下面是代码实现:

ImagePanel.java文件如下

package com.application.sample;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Image;

import javax.swing.ImageIcon;

import javax.swing.JPanel;

public class ImagePanel extends JPanel{

private Image img;

public ImagePanel(String path)

{

this(new ImageIcon(path).getImage());

}

public ImagePanel(Image img)

{

this.img=img;

Dimension size=new Dimension(img.getWidth(null),img.getHeight(null));

setPreferredSize(size);

setMinimumSize(size);

setMaximumSize(size);

setSize(size);

setLayout(null);

}

public void paintComponent(Graphics g)

{

g.drawImage(img, 0, 0, null);

}

}

CopyImage.java文件如下:

package com.application.sample;

import java.awt.Graphics;

import java.awt.Rectangle;

import java.awt.Robot;

import java.awt.event.*;

import java.io.*;

import javax.swing.JFrame;

import javax.imageio.ImageIO;

import java.awt.image.BufferedImage;

import java.math.*;

public class CopyImage extends JFrame

implements MouseListener,MouseMotionListener{

int drag_status=0,c1,c2,c3,c4;

public static void main(String[] args) {

// TODO Auto-generated method stub

new CopyImage().start("D:\\插入排序.jpg");

}

public void start(String path)

{

ImagePanel image=new ImagePanel(path);

add(image);

setSize(400,400);

setVisible(true);

addMouseListener(this);

addMouseMotionListener(this);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

}

public void draggedScreen()throws Exception

{

int w = c1 - c3;

int h = c2 - c4;

w =Math.abs(w);

h =Math.abs(h);

Robot robot = new Robot();

BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h));

File save_path=new File("D:\\screen1.jpg");

ImageIO.write(img, "JPG", save_path);

System.out.println("Cropped image saved successfully.");

}

@Override

public void mouseClicked(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mouseEntered(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mouseExited(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mousePressed(MouseEvent e) {

// TODO Auto-generated method stub

repaint();

c1=e.getX();

c2=e.getY();

}

@Override

public void mouseReleased(MouseEvent e) {

// TODO Auto-generated method stub

repaint();

if(drag_status==1)

{

c3=e.getX();

c4=e.getY();

try

{

draggedScreen();

}

catch(Exception error)

{

error.printStackTrace();

}

}

}

@Override

public void mouseDragged(MouseEvent e) {

// TODO Auto-generated method stub

repaint();

drag_status=1;

c3=e.getX();

c4=e.getY();

}

@Override

public void mouseMoved(MouseEvent e) {

// TODO Auto-generated method stub

}

public void paint(Graphics g)

{

super.paint(g);

int w = c1 - c3;

int h = c2 - c4;

w = w * -1;

h = h * -1;

if(w<0)

w = w * -1;

g.drawRect(c1, c2, w, h);

}

}

运行结果如下所示:

原图片如下:

0818b9ca8b590ca3270a3433284dd417.png

裁剪所得的图片如下所示:

0818b9ca8b590ca3270a3433284dd417.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值