2024/11/16

今天完成软件构造的实验二

百度图像增强与特效SDK实验(2024.11.22日完成)

    任务一:下载配置百度图像增强与特效的Java相关库及环境(占10%)。

    任务二:了解百度图像增强与特效相关功能并进行总结(占20%)。

    任务三:完成图像增强GUI相关功能代码并测试调用,要求上传自己的模糊照片进行图像增强(占30%)。

    任务四:完成图像特效GUI相关功能代码并测试调用,要求上传自己的照片进行图像特效(占30%)。

这里主要放置的时GUI页面具体的方法可以复制官网的实例代码然后修改即可

package com.mes.util;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.util.Base64;

public class ImageProcessingGUI extends JFrame {

    private JButton selectImageButton;
    private JButton animeButton;
    private JButton enhanceButton;
    private JLabel originalImageLabel; // 用于显示原图片
    private JLabel processedImageLabel; // 用于显示处理后的图片
    private JLabel originalImagePlaceholder; // 原图片区域占位提示文本
    private JLabel processedImagePlaceholder; // 处理后图片区域占位提示文本
    private JFileChooser fileChooser;
    private File selectedImageFile; // 用于存储已选择的图片文件

    public ImageProcessingGUI() {
        // 设置窗口标题
        setTitle("图片处理工具");
        // 设置窗口大小
        setSize(800, 600);
        // 设置窗口关闭时的操作
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 使用BorderLayout布局管理器
        setLayout(new BorderLayout());

        // 创建并初始化按钮
        selectImageButton = new JButton("选择图片");
        animeButton = new JButton("人像动漫化");
        enhanceButton = new JButton("增加图像清晰度");

        // 设置按钮大小和颜色

        Color buttonColor = new Color(59, 130, 246);
        selectImageButton.setBackground(buttonColor);
        animeButton.setBackground(buttonColor);
        enhanceButton.setBackground(buttonColor);

        selectImageButton.setForeground(Color.WHITE);
        animeButton.setForeground(Color.WHITE);
        enhanceButton.setForeground(Color.WHITE);

        // 设置按钮鼠标悬停效果
        setButtonHoverEffect(selectImageButton);
        setButtonHoverEffect(animeButton);
        setButtonHoverEffect(enhanceButton);

        // 创建用于显示原图片和处理后图片的标签
        originalImageLabel = new JLabel();
        processedImageLabel = new JLabel();

        // 创建原图片和处理后图片区域的占位提示文本
        originalImagePlaceholder = new JLabel("原图", SwingConstants.CENTER);
        processedImagePlaceholder = new JLabel("结果图", SwingConstants.CENTER);

        // 设置图片显示标签的大小和样式
        originalImageLabel.setPreferredSize(new Dimension(350, 350));
        processedImageLabel.setPreferredSize(new Dimension(350, 350));

        originalImageLabel.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
        processedImageLabel.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));


        Color placeholderColor = new Color(150, 150, 150);
        originalImagePlaceholder.setForeground(placeholderColor);
        processedImagePlaceholder.setForeground(placeholderColor);

        // 创建文件选择器
        fileChooser = new JFileChooser();

        // 为选择图片按钮添加监听器
        selectImageButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int returnVal = fileChooser.showOpenDialog(ImageProcessingGUI.this);
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    selectedImageFile = fileChooser.getSelectedFile();
                    try {
                        // 读取选中的图片文件
                        BufferedImage image = ImageIO.read(selectedImageFile);
                        // 将原图片显示在对应的标签上
                        originalImageLabel.setIcon(new ImageIcon(image));
                        // 隐藏原图片区域的占位提示文本
                        originalImagePlaceholder.setVisible(false);
                    } catch (IOException ex) {
                        JOptionPane.showMessageDialog(ImageProcessingGUI.this, "读取图片失败: " + ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
                    }
                }
            }
        });

        // 为动漫化按钮添加监听器
        animeButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (selectedImageFile!= null) {
                    // 获取已选择图片的路径
                    String imagePath = selectedImageFile.getAbsolutePath();
                    try {
                        // 模拟调用将图片转换为Base64编码的方法
                        String base64Image = ToBase64.getFileContentAsBase64(imagePath, true);
                        // 对Base64编码的图片进行人像动漫化处理
                        String resultImage = ChangeUtil.getAnimeImage(base64Image);
                        // 将Base64编码转换为字节数组
                        byte[] imageBytes = Base64.getDecoder().decode(resultImage);
                        // 将字节数组转换为BufferedImage
                        BufferedImage processedImage = ImageIO.read(new java.io.ByteArrayInputStream(imageBytes));
                        // 将处理后的图片显示在对应的标签上
                        processedImageLabel.setIcon(new ImageIcon(processedImage));
                        // 隐藏处理后图片区域的占位提示文本
                        processedImagePlaceholder.setVisible(false);
                    } catch (IOException ex) {
                        JOptionPane.showMessageDialog(ImageProcessingGUI.this, "显示动漫化图片失败: " + ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
                    }
                } else {
                    JOptionPane.showMessageDialog(ImageProcessingGUI.this, "请先选择图片", "提示", JOptionPane.INFORMATION_MESSAGE);
                }
            }
        });

        // 为增加清晰度按钮添加监听器
        enhanceButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (selectedImageFile!= null) {
                    // 获取已选择图片的路径
                    String imagePath = selectedImageFile.getAbsolutePath();
                    try {
                        // 模拟调用将图片转换为Base64编码的方法,这里需要替换为你实际的方法
                        String base64Image = ToBase64.getFileContentAsBase64(imagePath, true);
                        // 对Base64编码的图片进行增加清晰度处理
                        String resultImage = ChangeUtil.getClarityImage(base64Image);
                        // 将Base64编码转换为字节数组
                        byte[] imageBytes = Base64.getDecoder().decode(resultImage);
                        // 将字节数组转换为BufferedImage
                        BufferedImage processedImage = ImageIO.read(new java.io.ByteArrayInputStream(imageBytes));
                        // 将处理后的图片显示在对应的标签上
                        processedImageLabel.setIcon(new ImageIcon(processedImage));
                        // 隐藏处理后图片区域的占位提示文本
                        processedImagePlaceholder.setVisible(false);
                    } catch (IOException ex) {
                        JOptionPane.showMessageDialog(ImageProcessingGUI.this, "显示增加清晰度图片失败: " + ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
                    }
                } else {
                    JOptionPane.showMessageDialog(ImageProcessingGUI.this, "请先选择图片", "请先选择图片", JOptionPane.INFORMATION_MESSAGE);
                }
            }
        });

        // 创建一个面板用于放置按钮
        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new FlowLayout());
        buttonPanel.add(selectImageButton);
        buttonPanel.add(animeButton);
        buttonPanel.add(enhanceButton);

        // 将按钮面板添加到窗口的北部区域
        add(buttonPanel, BorderLayout.NORTH);

        // 创建一个面板用于放置图片显示标签和占位提示文本
        JPanel originalImagePanel = new JPanel(new BorderLayout());
        originalImagePanel.add(originalImageLabel, BorderLayout.CENTER);
        originalImagePanel.add(originalImagePlaceholder, BorderLayout.SOUTH);

        JPanel processedImagePanel = new JPanel(new BorderLayout());
        processedImagePanel.add(processedImageLabel, BorderLayout.CENTER);
        processedImagePanel.add(processedImagePlaceholder, BorderLayout.SOUTH);

        // 创建一个主图片面板用于放置原图片和处理后图片面板
        JPanel imagePanel = new JPanel(new FlowLayout());
        imagePanel.add(originalImagePanel);
        imagePanel.add(processedImagePanel);

        // 将图片面板添加到窗口的中心区域
        add(imagePanel, BorderLayout.CENTER);

        // 设置窗口可见
        setVisible(true);
    }

    private void setButtonHoverEffect(JButton button) {
        button.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent e) {
                button.setBackground(new Color(30, 85, 180));
            }

            @Override
            public void mouseExited(MouseEvent e) {
                button.setBackground(new Color(59, 130, 246));
            }
        });
    }

}

 

posted @ 2024-11-16 10:22  伐木工熊大  阅读(8)  评论(0)    收藏  举报