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