0

在 Java 中,我将图像文件从一个位置复制到另一个位置。该程序正在正确执行,但我希望目标文件大小与源文件大小不同。有没有其他方法可以在新位置调整文件大小?我正在使用以下代码:

public class NewJFrame extends javax.swing.JFrame {

    public NewJFrame() {
        initComponents();
    }

    public static void copyFile(File sourceFile, File destFile)
            throws IOException {
        if (!destFile.exists()) {
            destFile.createNewFile();
        }

        FileChannel source = null;
        FileChannel destination = null;
        try {
            source = new FileInputStream(sourceFile).getChannel();
            destination = new FileOutputStream(destFile).getChannel();

            // previous code: destination.transferFrom(source, 0, source.size());
            // to avoid infinite loops, should be:
            long count = 0;
            long size = source.size();
            while ((count += destination.transferFrom(source, count, size
                    - count)) < size)
                ;
        } finally {
            if (source != null) {
                source.close();
            }
            if (destination != null) {
                destination.close();
            }
        }
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        try {
            File sourceFile = new File(
                    "d:/adesh/golden_temple_amritsar_india-normal.jpg");

            File destFile = new File(
                    "d:/adesh2/golden_temple_amritsar_india-normal.jpg");

            copyFile(sourceFile, destFile);
        } catch (Exception ex) {
        }

    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }

    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
}
4

1 回答 1

1

这是根据您的规范调整图像大小的代码。在 copyFile 方法中,

整数宽度=100,高度=75;/* 在这里设置宽度和高度 */

BufferedImage inputImage=ImageIO.read(sourceFile);

BufferedImage outputImage=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

Graphics2D g=outputImage.createGraphics();

g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BICUBIC);

g.clearRect(0, 0, 宽度, 高度);

g.drawImage(inputImage, 0, 0, 宽度, 高度, null);

g.dispose();

ImageIO.write(outputImage,"jpg",destFile); /* 第一个参数是 BufferedImage 的对象,第二个参数是你要写入的图像类型,可以使用 jpg、bmp、png 等,第三个参数是目标文件对象。*/

于 2013-03-12T05:13:40.670 回答