java 그림 자르고 저장하는 예시 공유

7965 단어 java 자르기 그림
다음 단계를 통해 학습합니다.
이미지를 입력하고 처리할 이미지 경로를 지정하여 사용자가 잘라낼 부분을 드래그하여 선택한 후 Robot 클래스를 사용하여 잘라낸 부분의 좌표를 확인하고 다음에 인코딩을 시작할 부분을 유지합니다.
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; 
import java.io.File; 
import javax.imageio.ImageIO; 
import javax.swing.JFrame;
설명:
Graphics 클래스는 직사각형을 그리는 방법을 포함합니다. 우리는 Rectangle 클래스를 드래그하는 직사각형 영역으로 사용합니다. 자르기 로봇 클래스는 화면 캡처에 사용됩니다. 마우스 탐지기를 사용하여 마우스를 가져오는 드래그 시간 로봇 클래스는 BufferedImage를 사용하여 이미지 파일을 엽니다. ImageIO 클래스는 그림을 png 또는 jpg 이미지 파일에 쓰는 데 사용됩니다. JFrame은 인터페이스를 표시하는 데 사용됩니다.
이제 메인 방법을 포함하는 입구 클래스를 작성합니다.
Listing2: 포털 클래스

public class CropImage extends JFrame implements MouseListener, MouseMotionListener 

    int drag_status=0,c1,c2,c3,c4; 
public static void main(String args[]) 

    new CropImage().start(); 
}
설명:
CropImage라는 클래스를 만들었습니다. 이 클래스는 JFrame을 확장하여 프레임의 모든 기능을 실현하고 다양한 마우스 이벤트 탐지기를 실현하여 사용자가 언제 마우스 포인터를 드래그하기 시작했는지 알 수 있습니다 drag_status 변수는 마우스가 드래그하기 시작할 때의 좌표를 저장하는 데 사용됩니다. 우리는main 방법을 정의하여start 방법을 사용합니다. 이 방법은 아래에 정의됩니다.
다음은 start 방법입니다.
Listing 2

public void start() 

    ImagePanel im=new ImagePanel("F:\\Wallpaper\\wallpapers\\1.jpg"); 
    add(im); 
    setSize(400,400); 
    setVisible(true); 
    addMouseListener(this); 
    addMouseMotionListener( this ); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
}
설명:
ImagePanel이라는 클래스를 정의합니다. 처리할 이미지를 매개 변수로 JFrame에 그림을 표시할 ImagePanel을 놓고 마우스 이벤트 탐색을 시작합니다.
마우스 이벤트를 처리하는 방법을 정의합니다.
Listing 3: 마우스 이벤트 처리 함수

@Override
public void mouseClicked(MouseEvent arg0) { 


@Override
public void mouseEntered(MouseEvent arg0) { 


@Override
public void mouseExited(MouseEvent arg0) { 


@Override
public void mousePressed(MouseEvent arg0) { 
    repaint(); 
    c1=arg0.getX(); 
    c2=arg0.getY(); 


@Override
public void mouseReleased(MouseEvent arg0) { 
    repaint(); 
    if(drag_status==1) 
    { 
    c3=arg0.getX(); 
    c4=arg0.getY(); 
    try
    { 
    draggedScreen(); 
    } 
    catch(Exception e) 
    { 
        e.printStackTrace(); 
    } 
    } 


@Override
public void mouseDragged(MouseEvent arg0) { 
    repaint(); 
    drag_status=1; 
    c3=arg0.getX(); 
    c4=arg0.getY(); 


@Override
public void mouseMoved(MouseEvent arg0) { 



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); 

}
설명:
마우스를 눌렀을 때 현재 좌표를 c1과 c2에 저장하고 마우스를 눌렀을 때 드래그 상태 변수 drag_status가true로 설정되어 마우스 단추가 풀렸을 때 이미지 커팅 영역이 선택되었음을 나타냅니다. 드래그할 때의 직사각형 디스플레이에 draggedscreen 방법paint 방법을 사용합니다. 현재 좌표와 초기 기록된 좌표를 통해 직사각형을 그합니다
다음은draggedscreen 방법의 코드입니다

Listing 4: draggedScreen

public void draggedScreen()throws Exception 

        int w = c1 - c3; 
        int h = c2 - c4; 
        w = w * -1; 
        h = h * -1; 
        Robot robot = new Robot(); 
        BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h)); 
        File save_path=new File("screen1.jpg"); 
        ImageIO.write(img, "JPG", save_path); 
    System.out.println("Cropped image saved successfully."); 
}}

설명:
먼저 이미지의 높이와 폭을 계산하고 로봇 클래스를 사용하여 잘린 구역을 캡처하여 다른 파일 화면으로 유지합니다.jpg
완전한 코드

Listing 5: ImagePanel.java

import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Image; 

import javax.swing.ImageIcon; 
import javax.swing.JPanel; 

    class ImagePanel extends JPanel { 

          private Image img; 

          public ImagePanel(String img) { 
            this(new ImageIcon(img).getImage()); 
          } 

          public ImagePanel(Image img) { 
            this.img = img; 
            Dimension size = new Dimension(img.getWidth(null), img.getHeight(null)); 
           // Dimension size = new Dimension(10,10); 
            setPreferredSize(size); 
            setMinimumSize(size); 
            setMaximumSize(size); 
            setSize(size); 
            setLayout(null); 
          } 

          public void paintComponent(Graphics g) { 
            g.drawImage(img, 0, 0, null); 
          } 

        }
Listing 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; 
import java.io.File; 
import javax.imageio.ImageIO; 
import javax.swing.JFrame; 

public class CropImage extends JFrame implements MouseListener, MouseMotionListener 

    int drag_status=0,c1,c2,c3,c4; 
public static void main(String args[]) 

    new CropImage().start(); 

public void start() 

    ImagePanel im=new ImagePanel("F:\\Wallpaper\\wallpapers\\1.jpg"); 
    add(im); 
    setSize(400,400); 
    setVisible(true); 
    addMouseListener(this); 
    addMouseMotionListener( this ); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 

public void draggedScreen()throws Exception 

        int w = c1 - c3; 
        int h = c2 - c4; 
        w = w * -1; 
        h = h * -1; 
        Robot robot = new Robot(); 
        BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h)); 
        File save_path=new File("screen1.jpg"); 
        ImageIO.write(img, "JPG", save_path); 
    System.out.println("Cropped image saved successfully."); 

@Override
public void mouseClicked(MouseEvent arg0) {     


@Override
public void mouseEntered(MouseEvent arg0) {     


@Override
public void mouseExited(MouseEvent arg0) {      


@Override
public void mousePressed(MouseEvent arg0) { 
    repaint(); 
    c1=arg0.getX(); 
    c2=arg0.getY(); 


@Override
public void mouseReleased(MouseEvent arg0) { 
    repaint(); 
    if(drag_status==1) 
    { 
    c3=arg0.getX(); 
    c4=arg0.getY(); 
    try
    { 
    draggedScreen(); 
    } 
    catch(Exception e) 
    { 
        e.printStackTrace(); 
    } 
    } 


@Override
public void mouseDragged(MouseEvent arg0) { 
    repaint(); 
    drag_status=1; 
    c3=arg0.getX(); 
    c4=arg0.getY(); 


@Override
public void mouseMoved(MouseEvent arg0) { 



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);   

}

좋은 웹페이지 즐겨찾기