如题,有谁知道用什么方法实现?或者告知用什么jar。谢谢!!!

解决方案 »

  1.   

    给个例子里看看:
    import java.awt.event.*;
    import java.awt.image.*;
    import java.io.*;
    import java.util.*;
    import java.util.List;
    import javax.imageio.*;
    import javax.imageio.stream.*;
    import javax.swing.*;/**
     * This program lets you read and write image files in the formats that the JDK
     * supports. Multi-file images are supported.
     */
    public class ImageIOTest {
      public static void main(String[] args) {
        JFrame frame = new ImageIOFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
      }
    }/**
     * This frame displays the loaded images. The menu has items for loading and
     * saving files.
     */
    class ImageIOFrame extends JFrame {
      public ImageIOFrame() {
        setTitle("ImageIOTest");
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);    JMenu fileMenu = new JMenu("File");
        JMenuItem openItem = new JMenuItem("Open");
        openItem.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent event) {
            openFile();
          }
        });
        fileMenu.add(openItem);    JMenu saveMenu = new JMenu("Save");
        fileMenu.add(saveMenu);
        Iterator<String> iter = writerFormats.iterator();
        while (iter.hasNext()) {
          final String formatName = iter.next();
          JMenuItem formatItem = new JMenuItem(formatName);
          saveMenu.add(formatItem);
          formatItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
              saveFile(formatName);
            }
          });
        }    JMenuItem exitItem = new JMenuItem("Exit");
        exitItem.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent event) {
            System.exit(0);
          }
        });
        fileMenu.add(exitItem);    JMenuBar menuBar = new JMenuBar();
        menuBar.add(fileMenu);
        setJMenuBar(menuBar);
      }  /**
       * Open a file and load the images.
       */
      public void openFile() {
        JFileChooser chooser = new JFileChooser();
        chooser.setCurrentDirectory(new File("."));    chooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
          public boolean accept(File f) {
            if (f.isDirectory())
              return true;
            String name = f.getName();
            int p = name.lastIndexOf('.');
            if (p == -1)
              return false;
            String suffix = name.substring(p + 1).toLowerCase();
            return readerSuffixes.contains(suffix);
          }      public String getDescription() {
            return "Image files";
          }
        });
        int r = chooser.showOpenDialog(this);
        if (r != JFileChooser.APPROVE_OPTION)
          return;
        File f = chooser.getSelectedFile();
        Box box = Box.createVerticalBox();
        try {
          String name = f.getName();
          String suffix = name.substring(name.lastIndexOf('.') + 1);
          Iterator<ImageReader> iter = ImageIO.getImageReadersBySuffix(suffix);
          ImageReader reader = iter.next();
          ImageInputStream imageIn = ImageIO.createImageInputStream(f);
          reader.setInput(imageIn);
          int count = reader.getNumImages(true);
          images = new BufferedImage[count];
          for (int i = 0; i < count; i++) {
            images[i] = reader.read(i);
            box.add(new JLabel(new ImageIcon(images[i])));
          }
        } catch (IOException e) {
          JOptionPane.showMessageDialog(this, e);
        }
        setContentPane(new JScrollPane(box));
        validate();
      }  /**
       * Save the current image in a file
       * 
       * @param formatName the file format
       */
      public void saveFile(final String formatName) {
        if (images == null)
          return;
        Iterator<ImageWriter> iter =
            ImageIO.getImageWritersByFormatName(formatName);
        ImageWriter writer = iter.next();
        final List<String> writerSuffixes =
            Arrays.asList(writer.getOriginatingProvider().getFileSuffixes());
        JFileChooser chooser = new JFileChooser();
        chooser.setCurrentDirectory(new File("."));    chooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
          public boolean accept(File f) {
            if (f.isDirectory())
              return true;
            String name = f.getName();
            int p = name.lastIndexOf('.');
            if (p == -1)
              return false;
            String suffix = name.substring(p + 1).toLowerCase();
            return writerSuffixes.contains(suffix);
          }      public String getDescription() {
            return formatName
                + " files";
          }
        });    int r = chooser.showSaveDialog(this);
        if (r != JFileChooser.APPROVE_OPTION)
          return;
        File f = chooser.getSelectedFile();
        try {
          ImageOutputStream imageOut = ImageIO.createImageOutputStream(f);
          writer.setOutput(imageOut);      writer.write(new IIOImage(images[0], null, null));
          for (int i = 1; i < images.length; i++) {
            IIOImage iioImage = new IIOImage(images[i], null, null);
            if (writer.canInsertImage(i))
              writer.writeInsert(i, iioImage, null);
          }
        } catch (IOException e) {
          JOptionPane.showMessageDialog(this, e);
        }
      }  /**
       * Gets a set of all file suffixes that are recognized by image readers.
       * 
       * @return the file suffix set
       */
      public static Set<String> getReaderSuffixes() {
        TreeSet<String> readerSuffixes = new TreeSet<String>();
        for (String name : ImageIO.getReaderFormatNames()) {
          Iterator<ImageReader> iter = ImageIO.getImageReadersByFormatName(name);
          while (iter.hasNext()) {
            ImageReader reader = iter.next();
            String[] s = reader.getOriginatingProvider().getFileSuffixes();
            readerSuffixes.addAll(Arrays.asList(s));
          }
        }
        return readerSuffixes;
      }  /**
       * Gets a set of "preferred" format names of all image writers. The preferred
       * format name is the first format name that a writer specifies.
       * 
       * @return the format name set
       */
      public static Set<String> getWriterFormats() {
        TreeSet<String> writerFormats = new TreeSet<String>();
        TreeSet<String> formatNames =
            new TreeSet<String>(Arrays.asList(ImageIO.getWriterFormatNames()));
        while (formatNames.size() > 0) {
          String name = formatNames.iterator().next();
          Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName(name);
          ImageWriter writer = iter.next();
          String[] names = writer.getOriginatingProvider().getFormatNames();
          writerFormats.add(names[0]);
          formatNames.removeAll(Arrays.asList(names));
        }
        return writerFormats;
      }  private BufferedImage[] images;  private static Set<String> readerSuffixes = getReaderSuffixes();  private static Set<String> writerFormats = getWriterFormats();  private static final int DEFAULT_WIDTH = 400;  private static final int DEFAULT_HEIGHT = 400;
    }