이것은 초급 수준의 기사이므로 전문가는 건너뛰시기 바랍니다.
이 기사에서는 Java에서 이미지를 자르고 자른 부분을 별도로 파일에 저장하는 방법을 배웁니다.
우리는 다음 단계를 통해 배울 것입니다:
1. 이미지를 입력하고 처리할 이미지 경로를 지정합니다.
2. 잘라낼 부분을 사용자가 끌어다 놓을 수 있도록 허용
3. 선택 후 Robot 클래스를 이용하여 잘린 부분의 좌표를 결정합니다.
4. 선택한 이미지를 자르고 유지
다음으로 코딩 부분을 시작합니다.
Listing1: 소개된 클래스
다음과 같이 코드 코드를 복사합니다.
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
java.io.파일 가져오기;
javax.imageio.ImageIO 가져오기;
import javax.swing.JFrame;
설명하다:
1. Graphics 클래스에는 직사각형을 그리는 방법이 포함되어 있습니다.
2. 클리핑을 위해 드래그된 직사각형 영역으로 Rectangle 클래스를 사용합니다.
3.Robot 클래스는 스크린샷을 캡처하는 데 사용됩니다.
4. 마우스 리스너를 사용하여 마우스 드래그 시간 가져오기
5. Robot 클래스는 이미지 처리를 위해 BufferedImage를 사용합니다.
6.File 클래스는 이미지 파일을 여는 데 사용됩니다.
7.ImageIO 클래스는 이미지를 png 또는 jpg 이미지 파일에 쓰는 데 사용됩니다.
8.JFrame은 인터페이스를 표시하는 데 사용됩니다.
이제 우리는 메인 메소드를 포함하는 엔트리 클래스를 작성합니다.
목록 2: 항목 클래스
다음과 같이 코드 코드를 복사합니다.
공개 클래스 CropImage는 JFrame을 확장하여 MouseListener, MouseMotionListener를 구현합니다.
{
int drag_status=0,c1,c2,c3,c4;
공개 정적 무효 메인(문자열 인수[])
{
새로운 CropImage().start();
}
설명하다:
1. CropImage라는 클래스를 작성했습니다.
2. 이 클래스는 JFrame을 확장하여 프레임의 모든 기능을 구현합니다.
3. 사용자가 마우스 포인터 드래그를 시작하는 시점을 알 수 있도록 다양한 마우스 이벤트 리스너를 구현했습니다.
4.drag_status 변수는 마우스가 드래그를 시작할 때 좌표를 저장하는 데 사용됩니다.
5. 우리는 시작 메소드를 호출하기 위한 메인 메소드를 정의했습니다. 이는 아래에 정의됩니다.
다음은 시작 방법입니다.
목록 2
다음과 같이 코드 코드를 복사합니다.
공개 무효 시작()
{
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
추가(im);
setSize(400,400);
setVisible(참);
addMouseListener(this);
addMouseMotionListener(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
설명하다:
1. 처리할 이미지를 매개변수로 사용하여 ImagePanel이라는 클래스를 정의합니다.
2. ImagePanel을 배치하여 JFrame에 이미지를 표시하고 마우스 이벤트 수신을 시작합니다.
다음으로 마우스 이벤트를 처리하는 방법을 정의합니다.
목록 3: 마우스 이벤트 핸들러
다음과 같이 코드 코드를 복사합니다.
@보수
공공 무효 mouseClicked(MouseEvent arg0) {
}
@보수
공공 무효 mouseEntered(MouseEvent arg0) {
}
@보수
공공 무효 mouseExited(MouseEvent arg0) {
}
@보수
공공 무효 mousePressed(MouseEvent arg0) {
다시 칠하기();
c1=arg0.getX();
c2=arg0.getY();
}
@보수
공공 무효 mouseReleased(MouseEvent arg0) {
다시 칠하기();
if(드래그_상태==1)
{
c3=arg0.getX();
c4=arg0.getY();
노력하다
{
드래그스크린();
}
잡기(예외 e)
{
e.printStackTrace();
}
}
}
@보수
공공 무효 mouseDragged(MouseEvent arg0) {
다시 칠하기();
drag_status=1;
c3=arg0.getX();
c4=arg0.getY();
}
@보수
공공 무효 mouseMoved(MouseEvent arg0) {
}
공공 보이드 페인트(그래픽 g)
{
super.paint(g);
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
만약(w<0)
w = w * -1;
g.drawRect(c1, c2, w, h);
}
설명하다:
1. 마우스를 눌렀을 때 현재 좌표를 c1, c2에 저장합니다.
2. 마우스를 누르고 드래그가 시작되면 드래그 상태 변수 drag_status를 true로 설정합니다.
3. 마우스 버튼을 놓으면 이미지 자르기 영역이 선택되었음을 의미하며 draggedscreen 메소드가 호출됩니다.
4. 드래그 시 직사각형을 표시하기 위해 페인트 메소드를 사용하며, 현재 좌표와 처음 기록된 좌표를 통해 직사각형을 그립니다.
다음은 draggedscreen 메소드에 대한 코드입니다.
목록 4: draggedScreen 메소드
다음과 같이 코드 코드를 복사합니다.
public void dragScreen()이 예외를 발생시킵니다.
{
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
로봇 로봇 = new Robot();
BufferedImage img = robots.createScreenCapture(new Rectangle(c1, c2,w,h));
파일 save_path=new File("screen1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("잘린 이미지가 성공적으로 저장되었습니다.");
}}
설명하다:
1. 먼저 이미지의 높이와 너비를 계산합니다.
2. Robot 클래스를 사용하여 잘린 영역의 스크린샷을 찍고 다른 파일 screen1.jpg에 저장합니다.
완전한 코드
목록 5: ImagePanel.java
다음과 같이 코드 코드를 복사합니다.
import java.awt.Dimension;
import java.awt.Graphics;
java.awt.Image 가져오기;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
ImagePanel 클래스는 JPanel을 확장합니다.
개인 이미지 img;
공개 ImagePanel(String img) {
this(new ImageIcon(img).getImage());
}
공개 ImagePanel(이미지 img) {
this.img = img;
치수 크기 = new Dimension(img.getWidth(null), img.getHeight(null));
// 차원 크기 = new Dimension(10,10);
setPreferredSize(크기);
setMinimumSize(크기);
setMaximumSize(크기);
setSize(크기);
setLayout(null);
}
공공 무효 페인트 구성 요소(그래픽 g) {
g.drawImage(img, 0, 0, null);
}
}
목록 6:CropImage.java
다음과 같이 코드 코드를 복사합니다.
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
java.io.파일 가져오기;
javax.imageio.ImageIO 가져오기;
import javax.swing.JFrame;
공개 클래스 CropImage는 JFrame을 확장하여 MouseListener, MouseMotionListener를 구현합니다.
{
int drag_status=0,c1,c2,c3,c4;
공개 정적 무효 메인(문자열 인수[])
{
새로운 CropImage().start();
}
공개 무효 시작()
{
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
추가(im);
setSize(400,400);
setVisible(참);
addMouseListener(this);
addMouseMotionListener(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void dragScreen()이 예외를 발생시킵니다.
{
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
로봇 로봇 = new Robot();
BufferedImage img = robots.createScreenCapture(new Rectangle(c1, c2,w,h));
파일 save_path=new File("screen1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("잘린 이미지가 성공적으로 저장되었습니다.");
}
@보수
공공 무효 mouseClicked(MouseEvent arg0) {
}
@보수
공공 무효 mouseEntered(MouseEvent arg0) {
}
@보수
공공 무효 mouseExited(MouseEvent arg0) {
}
@보수
공공 무효 mousePressed(MouseEvent arg0) {
다시 칠하기();
c1=arg0.getX();
c2=arg0.getY();
}
@보수
공공 무효 mouseReleased(MouseEvent arg0) {
다시 칠하기();
if(드래그_상태==1)
{
c3=arg0.getX();
c4=arg0.getY();
노력하다
{
드래그스크린();
}
잡기(예외 e)
{
e.printStackTrace();
}
}
}
@보수
공공 무효 mouseDragged(MouseEvent arg0) {
다시 칠하기();
drag_status=1;
c3=arg0.getX();
c4=arg0.getY();
}
@보수
공공 무효 mouseMoved(MouseEvent arg0) {
}
공공 보이드 페인트(그래픽 g)
{
super.paint(g);
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
만약(w<0)
w = w * -1;
g.drawRect(c1, c2, w, h);
}
}