一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java裁剪圖片并保存的示例分享

java裁剪圖片并保存的示例分享

2019-10-27 12:20java教程網 JAVA教程

在這篇文章中我們將學習如何用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 類作為拖拉的矩形區域以作剪裁
Robot 類用于捕獲屏幕截圖
使用鼠標偵聽器來獲取鼠標的拖拉時間
Robot 類使用 BufferedImage 來做圖像處理
File 類用于打開圖像文件
ImageIO 類用于將圖像寫到 png 或者 jpg 圖像文件中
JFrame 用于顯示界面

現在我們編寫包含 main 方法的入口類

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 以實現 frame 的所有功能
實現了不同的鼠標事件偵聽器以便知道用戶什么時候開始拖動鼠標指針
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.");  
}} 

 

說明:

首先計算圖像的高度和寬度
使用 Robot 類來對剪裁的區域進行截圖并保持到另外一個文件 screen1.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);    
}  

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人久久网站 | 国产久视频 | 国产精品边做边接电话在线观看 | 亚洲精品成人AV在线观看爽翻 | 日韩在线视频在线 | 天天综合网网欲色 | 久久99国产精品二区不卡 | 精品日韩视频 | 俺去啦最新地址 | 色综久久天天综合绕视看 | 国产二区三区 | 久久精品亚洲热综合一本 | 天天综合网网欲色 | 美女和男人一起差差 | 免费观看日本人成影片 | 王小军怎么了最新消息 | 调教肉文 | 日本护士xxxx视频 | 99草视频 | 色呦呦网| 久久精品国产免费播放 | 日韩成人在线免费视频 | 日韩精品久久不卡中文字幕 | 视频在线观看一区二区 | 男人日女人的逼视频 | 日韩欧美推理片免费在线播放 | 调教小龙女 | 国产v在线播放 | 全是女性放屁角色的手游 | 果冻传媒天美传媒在线小视频播放 | 亚洲AV 日韩 国产 有码 | a亚洲天堂| 国产另类视频一区二区三区 | 国产综合亚洲专区在线 | 欧美伊香蕉久久综合类网站 | 成年人视频在线 | 无人区在线观看免费完整版免费 | 青青热久免费精品视频网站 | 精品国产免费 | h在线动漫 | 日本黄色大片免费观看 |