【问题标题】:save resized image java保存调整大小的图像java
【发布时间】:2012-09-30 16:16:09
【问题描述】:

如何将调整大小的图像保存到特定文件夹?

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    ImgChooser ic = new ImgChooser();
    ImageIcon icon = new ImageIcon(me,"id pic");
    Image img1 = icon.getImage();
    Image img2 = img1.getScaledInstance(105, 105, 0);
    icon.setImage(img2);
    jLabel1.setIcon(icon);
} 

第一个代码是我获取图像并调整其大小的地方。然后我希望将调整大小的图像保存在另一个文件夹中。提前致谢

【问题讨论】:

标签: java image swing javax.imageio imageicon


【解决方案1】:

正如其他人已经说过的那样使用ImageIO.write(...)(给他们+1),在这里添加一个例子:

public static void main(String[] args) {

    try {

        BufferedImage originalImage = ImageIO.read(new File("c:\\test.jpg"));//change path to where file is located
        int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType();

        BufferedImage resizeImageJpg = resizeImage(originalImage, type, 100, 100);
        ImageIO.write(resizeImageJpg, "jpg", new File("c:\\images\\testresized.jpg")); //change path where you want it saved

    } catch (IOException e) {
        System.out.println(e.getMessage());
    }

}

private static BufferedImage resizeImage(BufferedImage originalImage, int type, int IMG_WIDTH, int IMG_HEIGHT) {
    BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
    Graphics2D g = resizedImage.createGraphics();
    g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
    g.dispose();

    return resizedImage;
}

参考:

【讨论】:

  • 嘿先生。 david 如果我想读取 3 种文件类型,我该怎么办?
  • 对不起,我在谈论我的文件选择器。错误的问题对不起XD
  • 这是一个有用的开始,但质量差。我也将 getScaledInstance 与 SCALE_SMOOTH 一起使用,效果很好。
【解决方案2】:

试试这个...

使用ImageIO.write() 方法...

static boolean ImageIO.write(RenderedImage im, String formatName, File output) throws IOException

例如:

try {

    // retrieve image

    BufferedImage bi = getMyImage();
    File outputfile = new File("saved.png");
    ImageIO.write(bi, "png", outputfile);

} catch (IOException e) {
    ...
}

【讨论】:

    【解决方案3】:

    先把你的图片转换成BufferedImage,然后用ImageIO保存图片:

    BufferedImage image = new BufferedImage(img2.getWidth(null), img2.getHeight(null), BufferedImage.TYPE_4BYTE_ABGR);
    Graphics2D g2 = image.createGraphics();
    g2.drawImage(img2, 0, 0, null);
    g2.dispose();
    ImageIO.write(image, formatName, outputFile);
    

    其中格式名称为String,例如"jpg""png""gif",而outputFile 是将图像保存到的File

    另外请注意,如果您保存的图像不支持 alpha 级别(透明度),那么您传递给 BufferedImage 构造函数的第三个参数应该是一个 3 字节图像,例如:BufferedImage.TYPE_3BYTE_BGR

    【讨论】:

    • 我试过你的代码,我也做了一个像File output = new File("samp.jpg");这样的输出文件,但是当它在线程“AWT-EventQueue-0”java.lang中得到一个像这样的错误异常。 ClassCastException:sun.awt.image.ToolkitImage 无法转换为 java.awt.image.RenderedImage
    • 现在我收到此错误 线程“AWT-EventQueue-0”java.lang.IllegalArgumentException 中的异常:宽度 (-1) 和高度 (-1) 必须 > 0
    • @eric 如果您收到此错误,并且您按照示例进行操作,则您尝试保存的图像可能无效(太小)或原始图像未正确加载
    • 你能再检查一下我的代码吗XD ImageIcon icon = new ImageIcon(me,"id pic"); Image img1 = icon.getImage(); Image img2 = img1.getScaledInstance(105, 105, 0); BufferedImage image = new BufferedImage(img2.getWidth(null), img2.getHeight(null), BufferedImage.TYPE_4BYTE_ABGR); Graphics2D g2 = image.createGraphics(); g2.drawImage(img2, 0, 0, null); g2.dispose(); icon.setImage(img2);
    • File output = new File("samp.jpg"); try { ImageIO.write(image, "jpg", output); } catch (IOException ex) { Logger.getLogger(ID_Form.class.getName()).log(Level.SEVERE, null, ex); }
    猜你喜欢
    • 1970-01-01
    • 2011-10-24
    • 2010-10-12
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 2014-09-01
    • 2013-07-26
    • 1970-01-01
    相关资源
    最近更新 更多