调整java中的图像大小 - 我需要更改什么?

时间:2014-04-09 13:48:48

标签: java image resize bufferedimage

我只是想知道如何在java中调整图像大小? 这是一个分配,我必须找到一个图像,然后将其保存为.png文件,该文件的分辨率是原始分辨率的一半。 到目前为止,这是我的代码;

enter code here

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class saveimage {

    public static void main(String[] args) // IOException
    {

        String sourceLocation;
        sourceLocation = (args[0]);

        int width = 963;
        int height = 640;
        int halfwidth = width / 2;
        int halfheight = height / 2;

        BufferedImage image1 = null;
        BufferedImage imagehalf = null;
        File readfile = null;

        try {
            readfile = new File(sourceLocation);
            image1 = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_ARGB);
            image1 = ImageIO.read(readfile);
            imagehalf = new BufferedImage(halfwidth, halfheight,
                    BufferedImage.TYPE_INT_ARGB);
            imagehalf = ImageIO.read(readfile);
            System.out.println("reading complete");
        }

        catch (IOException e) {
            System.out.println("Error: " + e);
        }
        try {
            readfile = new File("LOCATION OF FILE");
            ImageIO.write(image1, "png", readfile);
            System.out.println("Writing complete");
        } catch (IOException fail1) {
            System.out.println("Error:" + fail1);
        }
        try {
            readfile = new File "LOCATION OF OUTPUT"); 
            ImageIO.write(imagehalf, "png", readfile);
            System.out.println("writing half is complete");

        } catch (IOException fail2) {
            System.out.println("Error:" + fail2);
        }

    }

}

正如你所看到的那样,我刚开始将整数值减半,因为我认为它只会将输出大小减半,但它没有......我有什么问题吗?

作业的下一部分是我需要平铺图像,但我只是一步一步:)

提前致谢

3 个答案:

答案 0 :(得分:1)

AFAIK imagehalf = ImageIO.read(readfile);只会读取图片文件并创建原始尺寸的BufferedImage。你基本上做的是创建一个新的BufferedImage,然后将其替换为文件中的一个读取,这是行不通的。

您需要做的事情是:阅读原始图片,创建一半尺​​寸BufferedImage并将原始图像绘制为半尺寸图像。

使用getGraphics()方法,并在返回的drawImage(...)对象上使用必要参数调用Graphics

请注意,您可以使用BufferedImage#getScaledInstance(...),但您可能希望开始使用Graphics对象为将来的作业做好准备。

答案 1 :(得分:0)

嘿,我随意使用下面发布的代码:

public ImageIcon resizeImage(ImageIcon imageIcon, int width, int height, boolean max) 
{
    Image image = imageIcon.getImage();
    Image newimg = image.getScaledInstance(-1, height, java.awt.Image.SCALE_SMOOTH);
    int width1 = newimg.getWidth(null);
    if ((max && width1 > width) || (!max && width1 < width))
        newimg = image.getScaledInstance(width, -1, java.awt.Image.SCALE_SMOOTH);
    return new ImageIcon(newimg);
}

我实际上不知道我在互联网上找到的布尔最大值是什么。

答案 2 :(得分:0)

您需要获取resizedImage的图形上下文,然后使用您想要的尺寸将原始图像绘制到其中。根据它的外观,你可能也想看看Java的RenderingHints。

BufferedImage imageHalf = new BufferedImage(halfwidth, halfheight, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = imageHalf.createGraphics();
g.drawImage(fullImage, 0, 0, halfwidth, halfheight, null);
g.dispose();