我只是想知道如何在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);
}
}
}
正如你所看到的那样,我刚开始将整数值减半,因为我认为它只会将输出大小减半,但它没有......我有什么问题吗?
作业的下一部分是我需要平铺图像,但我只是一步一步:)
提前致谢
答案 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();