在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;
}
答案 0 :(得分:1)
以下是根据您的规范调整图像大小的代码。 在copyFile方法中,
int width = 100,height = 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,width,height,null);
g.dispose();
ImageIO.write(outputImage, “JPG”,destFile); / *第一个参数是BufferedImage的对象,第二个参数是你要编写的图像类型,你可以使用jpg,bmp,png等,第三个参数是目标文件对象。 * /