[关闭]
@Lxjeng 2016-06-16T02:59:03.000000Z 字数 5225 阅读 703

图片处理器


姓名:梁晓静 学号:1405010530 班级:计算机五班

一.实验题目

  • 图片编辑软件

二.实验目的

  • 编辑一个可以实现文字水印,图片水印,图片裁剪,图片拼接,图片放缩的图片处理器

三.实验平台

  • eclipse

四.实验要求

  • 不限开发工具
  • 软件至少支持两种图片文件格式,如bmp/jpg/png/gif等
  • 软件可以实现图片文件信息的读取、修改与保存,同时能浏览该文件
  • 在打开的图片文件中加入你的水印信息,比如你的大名!!
  • 16周周四提交报告、源码和可执行文件!

五.实验内容和步骤

  • 主界面
    此处输入图片的描述

  • 打开丶裁剪丶倍率放缩png图片
    此处输入图片的描述
    此处输入图片的描述
    此处输入图片的描述
    此处输入图片的描述

  • 添加水印信息“LXJ”
    此处输入图片的描述
    此处输入图片的描述

## 六.实验代码

  • 1.功能界面
  • 裁剪图片
  1. jimg.addActionListener(new ActionListener() {
  2. @Override
  3. public void actionPerformed(ActionEvent e) {
  4. // TODO Auto-generated method stub
  5. final JFrame jf = new JFrame("裁剪图片");
  6. jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  7. jf.add(new caijian("裁剪的高", "裁剪的宽"));
  8. cq.addActionListener(new ActionListener() {
  9. @Override
  10. public void actionPerformed(ActionEvent e) {
  11. // TODO Auto-generated method stub
  12. // 裁剪图片函数
  13. int x = Integer.valueOf(qx.getText()).intValue();
  14. int y = Integer.valueOf(qy.getText()).intValue();
  15. int width = Integer.valueOf(jw.getText()).intValue();
  16. int height = Integer.valueOf(jh.getText()).intValue();
  17. try {
  18. cropImage(str, str, x, y, width, height, strw);
  19. jf.dispose();
  20. } catch (IOException e1) {
  21. e1.printStackTrace();
  22. }
  23. }
  24. });
  25. jf.setSize(530, 500);
  26. jf.setLocation(300, 100);
  27. jf.setVisible(true);
  28. }
  29. });
  • 倍率放缩
  1. blimg.addActionListener(new ActionListener() {
  2. @Override
  3. public void actionPerformed(ActionEvent e) {
  4. // TODO Auto-generated method stub
  5. final JFrame jf = new JFrame("倍率放缩");
  6. jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  7. jf.add(new caijian("放缩的倍数"));
  8. cq.addActionListener(new ActionListener() {
  9. @Override
  10. public void actionPerformed(ActionEvent e) {
  11. // TODO Auto-generated method stub
  12. int bei = Integer.valueOf(jw.getText()).intValue();
  13. boolean f = true;
  14. if (bei < 0) {
  15. bei = 0 - bei;
  16. f = false;
  17. }
  18. scale(str, str, bei, f);
  19. jf.dispose();
  20. }
  21. });
  22. jf.setSize(500, 500);
  23. jf.setLocation(300, 100);
  24. jf.setVisible(true);
  25. }
  26. });
  • 添加文字
  1. zhimg.addActionListener(new ActionListener() {
  2. @Override
  3. public void actionPerformed(ActionEvent e) {
  4. // TODO Auto-generated method stub
  5. final JFrame jf = new JFrame("添加文字");
  6. jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  7. jf.add(new caijian("输入"));
  8. cq.addActionListener(new ActionListener() {
  9. @Override
  10. public void actionPerformed(ActionEvent e) {
  11. // TODO Auto-generated method stub
  12. String ss = jw.getText();
  13. int size = Integer.valueOf(js.getText()).intValue();
  14. int x = Integer.valueOf(jx.getText()).intValue();
  15. int y = Integer.valueOf(jy.getText()).intValue();
  16. tianp(ss, str, str, size, x, y, strj);
  17. jf.dispose();
  18. }
  19. });
  20. jf.setSize(500, 500);
  21. jf.setLocation(300, 100);
  22. jf.setVisible(true);
  23. }
  24. });
  • 2.功能实现函数
  1. public void cropImage(String srcPath, String toPath, int x, int y,
  2. int width, int height, String Format) throws IOException {
  3. FileInputStream fis = null;
  4. ImageInputStream iis = null;
  5. try {
  6. // 读取图片文件
  7. fis = new FileInputStream(srcPath);
  8. Iterator it = ImageIO.getImageReadersByFormatName(Format);
  9. ImageReader reader = (ImageReader) it.next();
  10. // 获取图片流
  11. iis = ImageIO.createImageInputStream(fis);
  12. reader.setInput(iis, true);
  13. ImageReadParam param = reader.getDefaultReadParam();
  14. // 定义一个矩形
  15. Rectangle rect = new Rectangle(x, y, width, height);
  16. // 提供一个 BufferedImage,将其用作解码像素数据的目标。
  17. param.setSourceRegion(rect);
  18. BufferedImage bi = reader.read(0, param);
  19. // 保存新图片
  20. ImageIO.write(bi, Format, new File(toPath));
  21. xianshi(toPath);
  22. return;
  23. } finally {
  24. if (fis != null)
  25. fis.close();
  26. if (iis != null)
  27. iis.close();
  28. }
  29. }
  30. /* 倍率放缩 */
  31. public final static void scale(String srcImageFile, String result,
  32. int scale, boolean flag) {
  33. try {
  34. BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件
  35. int width = src.getWidth(); // 得到源图宽
  36. int height = src.getHeight(); // 得到源图长
  37. if (flag) {// 放大
  38. width = width * scale;
  39. height = height * scale;
  40. } else {// 缩小
  41. width = width / scale;
  42. height = height / scale;
  43. }
  44. Image image = src.getScaledInstance(width, height,
  45. Image.SCALE_DEFAULT);
  46. BufferedImage tag = new BufferedImage(width, height,
  47. BufferedImage.TYPE_INT_RGB);
  48. Graphics g = tag.getGraphics();
  49. g.drawImage(image, 0, 0, null); // 绘制缩小后的图
  50. g.dispose();
  51. ImageIO.write(tag, strw, new File(result));// 输出到文件流
  52. xianshi(result);
  53. } catch (IOException e) {
  54. e.printStackTrace();
  55. }
  56. }
  57. /* 添加文字 */
  58. public final static void tianp(String pressText, String srcImageFile,
  59. String destImageFile, int size, int x, int y, String strj) {
  60. try {
  61. File img = new File(srcImageFile);
  62. Image src = ImageIO.read(img);
  63. int width = src.getWidth(null);
  64. int height = src.getHeight(null);
  65. BufferedImage image = new BufferedImage(width, height,
  66. BufferedImage.TYPE_INT_RGB);
  67. Graphics2D g = image.createGraphics();
  68. g.drawImage(src, 0, 0, width, height, null);
  69. if (strj == "red")
  70. g.setColor(Color.red);
  71. else if (strj == "blue")
  72. g.setColor(Color.blue);
  73. else if (strj == "black")
  74. g.setColor(Color.black);
  75. else
  76. g.setColor(Color.white);
  77. g.setFont(new Font("隶书", Font.BOLD, size));
  78. g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
  79. .8f));
  80. // 在指定坐标绘制水印文字
  81. g.drawString(pressText, (width - ((pressText.length()) * size)) / 2
  82. + x, (height - size) / 2 + y);
  83. g.dispose();
  84. ImageIO.write((BufferedImage) image, "JPEG",
  85. new File(destImageFile));// 输出到文件流
  86. xianshi(destImageFile);
  87. } catch (Exception e) {
  88. e.printStackTrace();
  89. }
  90. }
  91. public static void xianshi(String S ) {
  92. ImageIcon ik = new ImageIcon(S);
  93. ik.setImage(ik.getImage().getScaledInstance(450, 450,
  94. Image.SCALE_DEFAULT));
  95. final JFrame jf0 = new JFrame("新图片");
  96. jf0.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  97. JPanel jpk = new JPanel();
  98. JPanel jpk1 = new JPanel();
  99. JPanel jpk2 = new JPanel();
  100. jpk.setLayout(new BorderLayout());
  101. JButton cq1 = new JButton("确定");
  102. jpk1.add(cq1);
  103. cq1.addActionListener(new ActionListener() {
  104. @Override
  105. public void actionPerformed(ActionEvent e) {
  106. // TODO Auto-generated method stub
  107. jf0.setVisible(false);
  108. }
  109. });
  110. jpk2.add(new JLabel(ik));
  111. jpk.add(jpk1,BorderLayout.NORTH);
  112. jpk.add(jpk2,BorderLayout.CENTER);
  113. jf0.add(jpk);
  114. jf0.setSize(600, 600);
  115. jf0.setLocation(300, 100);
  116. jf0.setVisible(true);
  117. }
  118. }

七.实验体会

  • 这次实验主要是对java GUI及实现界面功能的编程,本来毫无头绪,但经过一周左右的数据库上机对javaGUI编程有了一定了解,加上同学的帮助和百度,才完成这次对我而言很难的任务。
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注