@Lxjeng
2016-06-16T02:59:03.000000Z
字数 5225
阅读 703
姓名:梁晓静 学号:1405010530 班级:计算机五班
- 图片编辑软件
- 编辑一个可以实现文字水印,图片水印,图片裁剪,图片拼接,图片放缩的图片处理器
- eclipse
- 不限开发工具
- 软件至少支持两种图片文件格式,如bmp/jpg/png/gif等
- 软件可以实现图片文件信息的读取、修改与保存,同时能浏览该文件
- 在打开的图片文件中加入你的水印信息,比如你的大名!!
- 16周周四提交报告、源码和可执行文件!
主界面
打开丶裁剪丶倍率放缩png图片
![]()
![]()
![]()
- 添加水印信息“LXJ”
![]()
## 六.实验代码
- 1.功能界面
- 裁剪图片
jimg.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubfinal JFrame jf = new JFrame("裁剪图片");jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.add(new caijian("裁剪的高", "裁剪的宽"));cq.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stub// 裁剪图片函数int x = Integer.valueOf(qx.getText()).intValue();int y = Integer.valueOf(qy.getText()).intValue();int width = Integer.valueOf(jw.getText()).intValue();int height = Integer.valueOf(jh.getText()).intValue();try {cropImage(str, str, x, y, width, height, strw);jf.dispose();} catch (IOException e1) {e1.printStackTrace();}}});jf.setSize(530, 500);jf.setLocation(300, 100);jf.setVisible(true);}});
- 倍率放缩
blimg.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubfinal JFrame jf = new JFrame("倍率放缩");jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.add(new caijian("放缩的倍数"));cq.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubint bei = Integer.valueOf(jw.getText()).intValue();boolean f = true;if (bei < 0) {bei = 0 - bei;f = false;}scale(str, str, bei, f);jf.dispose();}});jf.setSize(500, 500);jf.setLocation(300, 100);jf.setVisible(true);}});
- 添加文字
zhimg.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubfinal JFrame jf = new JFrame("添加文字");jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.add(new caijian("输入"));cq.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubString ss = jw.getText();int size = Integer.valueOf(js.getText()).intValue();int x = Integer.valueOf(jx.getText()).intValue();int y = Integer.valueOf(jy.getText()).intValue();tianp(ss, str, str, size, x, y, strj);jf.dispose();}});jf.setSize(500, 500);jf.setLocation(300, 100);jf.setVisible(true);}});
- 2.功能实现函数
public void cropImage(String srcPath, String toPath, int x, int y,int width, int height, String Format) throws IOException {FileInputStream fis = null;ImageInputStream iis = null;try {// 读取图片文件fis = new FileInputStream(srcPath);Iterator it = ImageIO.getImageReadersByFormatName(Format);ImageReader reader = (ImageReader) it.next();// 获取图片流iis = ImageIO.createImageInputStream(fis);reader.setInput(iis, true);ImageReadParam param = reader.getDefaultReadParam();// 定义一个矩形Rectangle rect = new Rectangle(x, y, width, height);// 提供一个 BufferedImage,将其用作解码像素数据的目标。param.setSourceRegion(rect);BufferedImage bi = reader.read(0, param);// 保存新图片ImageIO.write(bi, Format, new File(toPath));xianshi(toPath);return;} finally {if (fis != null)fis.close();if (iis != null)iis.close();}}/* 倍率放缩 */public final static void scale(String srcImageFile, String result,int scale, boolean flag) {try {BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件int width = src.getWidth(); // 得到源图宽int height = src.getHeight(); // 得到源图长if (flag) {// 放大width = width * scale;height = height * scale;} else {// 缩小width = width / scale;height = height / scale;}Image image = src.getScaledInstance(width, height,Image.SCALE_DEFAULT);BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics g = tag.getGraphics();g.drawImage(image, 0, 0, null); // 绘制缩小后的图g.dispose();ImageIO.write(tag, strw, new File(result));// 输出到文件流xianshi(result);} catch (IOException e) {e.printStackTrace();}}/* 添加文字 */public final static void tianp(String pressText, String srcImageFile,String destImageFile, int size, int x, int y, String strj) {try {File img = new File(srcImageFile);Image src = ImageIO.read(img);int width = src.getWidth(null);int height = src.getHeight(null);BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics2D g = image.createGraphics();g.drawImage(src, 0, 0, width, height, null);if (strj == "red")g.setColor(Color.red);else if (strj == "blue")g.setColor(Color.blue);else if (strj == "black")g.setColor(Color.black);elseg.setColor(Color.white);g.setFont(new Font("隶书", Font.BOLD, size));g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,.8f));// 在指定坐标绘制水印文字g.drawString(pressText, (width - ((pressText.length()) * size)) / 2+ x, (height - size) / 2 + y);g.dispose();ImageIO.write((BufferedImage) image, "JPEG",new File(destImageFile));// 输出到文件流xianshi(destImageFile);} catch (Exception e) {e.printStackTrace();}}public static void xianshi(String S ) {ImageIcon ik = new ImageIcon(S);ik.setImage(ik.getImage().getScaledInstance(450, 450,Image.SCALE_DEFAULT));final JFrame jf0 = new JFrame("新图片");jf0.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JPanel jpk = new JPanel();JPanel jpk1 = new JPanel();JPanel jpk2 = new JPanel();jpk.setLayout(new BorderLayout());JButton cq1 = new JButton("确定");jpk1.add(cq1);cq1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubjf0.setVisible(false);}});jpk2.add(new JLabel(ik));jpk.add(jpk1,BorderLayout.NORTH);jpk.add(jpk2,BorderLayout.CENTER);jf0.add(jpk);jf0.setSize(600, 600);jf0.setLocation(300, 100);jf0.setVisible(true);}}
- 这次实验主要是对java GUI及实现界面功能的编程,本来毫无头绪,但经过一周左右的数据库上机对javaGUI编程有了一定了解,加上同学的帮助和百度,才完成这次对我而言很难的任务。