一个简单的实现图片缩放的程序

本程序提供了一个简单易用的图片缩放工具,用户可以自定义缩放尺寸、选择图片及保存位置。支持jpg、jpeg、gif和png格式。

import java.awt.FlowLayout;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.LayoutManager;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.im.InputContext;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import javax.imageio.ImageIO;

import javax.swing.BoxLayout;

import javax.swing.JButton;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

import javax.swing.filechooser.FileNameExtensionFilter;

/*

 * 本程序实现了简单的图片缩放功能,并可以让用户指定存储的位置和自定义新图片的名称

 * */

public class ImageShrinkAndEnlargement {

    //声明窗体

    private JFrame jf=null;

    //声明主面板

    private JPanel mPanel=null;

    //声明其他面板

    private JPanel textPanel=null;

    private JLabel textLabel=null;

    private JPanel selectPanel=null;

    private JTextField selectedFile=null;

    private JButton select=null;

    private JPanel sizeTextPanel=null;

    private JLabel sizeTextLabel=null;

    private JTextField sizeWidth=null;

    private JLabel sign=null;

    private JTextField sizeHeight=null;

    private JPanel definePanel=null;

    private JButton define=null;

    private JPanel savePanel=null;

    private JLabel saveLabel=null;

    private JTextField saveTextField=null;

    private JButton saveButton=null;

    private JLabel targetLabel=null;

    private JTextField targetField=null;

    

    private File file=null;

    private File directory=null;

    private BufferedImage image=null;

    private FileOutputStream fileOutput=null;

    

    public ImageShrinkAndEnlargement(){

        jf=new JFrame("图片缩放工具");

        mPanel=new JPanel();

        textPanel=new JPanel();

        textLabel=new JLabel("选取要缩放的图片:");

        selectPanel=new JPanel();

        selectedFile=new JTextField(20);

        select=new JButton("选择");

        sizeTextPanel=new JPanel();

        sizeTextLabel=new JLabel("要缩放的尺寸:");

        sizeWidth=new JTextField(5);

        sign=new JLabel("×");

        sizeHeight=new JTextField(5);

        definePanel=new JPanel();

        define=new JButton("确定");

        savePanel=new JPanel();

        saveLabel=new JLabel("新图片存储位置:");

        saveTextField=new JTextField(11);

        saveButton=new JButton("选择");

        targetLabel=new JLabel("新图片的名字:");

        targetField=new JTextField(12);

    }

    public void init(){

        //将主面板的布局设置为垂直布局

        mPanel.setLayout(new BoxLayout(mPanel, BoxLayout.Y_AXIS));

        //将该面板的布局设置为从左边开始布局

        //面板默认是流式布局,且是居中对齐方式

        textPanel.setLayout(new FlowLayout(FlowLayout.LEFT));

        textPanel.add(textLabel);

        selectPanel.setLayout(new FlowLayout(FlowLayout.LEFT));

        selectPanel.add(selectedFile);

        selectPanel.add(select);

        sizeTextPanel.setLayout(new FlowLayout(FlowLayout.LEFT));

        sizeTextPanel.add(sizeTextLabel);

        sizeTextPanel.add(sizeWidth);

        sizeTextPanel.add(sign);

        sizeTextPanel.add(sizeHeight);

        savePanel.setLayout(new FlowLayout(FlowLayout.LEFT));

        savePanel.add(saveLabel);

        savePanel.add(saveTextField);

        savePanel.add(saveButton);

        definePanel.setLayout(new FlowLayout(FlowLayout.LEFT));

        definePanel.add(targetLabel);

        definePanel.add(targetField);

        definePanel.add(define);

        

        mPanel.add(textPanel);

        mPanel.add(selectPanel);

        mPanel.add(sizeTextPanel);

        mPanel.add(savePanel);

        mPanel.add(definePanel);

        

        //给按钮添加事件监听器

        select.addActionListener(new ActionListener() {

            

            @Override

            public void actionPerformed(ActionEvent e) {

                //当按钮按下,打开文件选择对话框

                JFileChooser chooser = new JFileChooser();

                //声明文件过滤器,只查找"jpg","jpeg","gif","png"这几种格式的图片

                FileNameExtensionFilter filter = new FileNameExtensionFilter("Image*", "jpg","jpeg","gif","png");

                //设置文件对话框的文件过滤器

                chooser.setFileFilter(filter);

                //打开对话框

                int returnVal = chooser.showOpenDialog(jf);

                //当用户单击了“打开”按钮

                if(returnVal==JFileChooser.APPROVE_OPTION){

                    file = chooser.getSelectedFile();

                    //将用户选择好的文件显示到文本框中

                    selectedFile.setText(file.getPath());

                }

            }

        });

        saveButton.addActionListener(new ActionListener() {

            

            @Override

            public void actionPerformed(ActionEvent e) {

                JFileChooser directoryChooser=new JFileChooser();

                //打开自定义的文件对话框,对话框标题为“选择”

                int i = directoryChooser.showDialog(jf,"选择");

                if(i==JFileChooser.APPROVE_OPTION){

                    directory = directoryChooser.getSelectedFile();

                    //将用户选择的路径和自定义文件夹显示到文本框中

                    saveTextField.setText(directory.getPath());

                    //在用户指定路径创建用户自定义的文件夹

                    directory.mkdir();

//                    System.out.println(directory.getPath());

                }

            }

        });

        define.addActionListener(new ActionListener() {

            

            @Override

            public void actionPerformed(ActionEvent e) {

                //分别获取用户设置的图片的宽和高

                int width = Integer.parseInt(sizeWidth.getText().trim());

                int height = Integer.parseInt(sizeHeight.getText().trim());

//                System.out.println(width+"=="+height+"---"+file.getName().split("\\.")[1]);

                //声明带缓存的位图对象,并指定宽和高

                image=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

                //获取对应的Graphics对象,它可以在image对象上画图

                Graphics g = image.getGraphics();

                try {

                    //通过ImageIO类的read方法读取一张位图

                    Image scrImage = ImageIO.read(file);

                    //将位图以指定的大小画到image上

                    g.drawImage(scrImage,0,0, width, height, null);

                    //声明输出流对象

                    fileOutput=new FileOutputStream(new File(directory,targetField.getText()+"."+file.getName().split("\\.")[1]));

                    //将image对象上的图片写到输出流中

                    //file.getName().split("\\.")[1]是获取文件的后缀名

                    ImageIO.write(image, file.getName().split("\\.")[1],fileOutput);

                } catch (IOException e1) {

                    e1.printStackTrace();

                }finally{

                    if(fileOutput!=null){

                        try {

                            fileOutput.close();

                        } catch (IOException e1) {

                            e1.printStackTrace();

                        }

                    }

                }

//                System.exit(0);

            }

        });

        

        jf.add(mPanel);

        jf.setLocation(300, 100);

        jf.setResizable(false);

        jf.pack();

        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        jf.setVisible(true);

    }

    

    public static void main(String[] args){

        new ImageShrinkAndEnlargement().init();

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值