如何减少java中的图像大小

时间:2017-09-25 06:13:15

标签: java image

(注意:我不能使用任何直接调整图像大小的库,我想知道调整大小的核心逻辑)

我有一个尺寸为256 * 256的灰度图像。我想修改它并创建以下三个图像  a)尺寸为128 * 128的图像  b)尺寸为64 * 64的图像  c)尺寸为32 * 32的图像。

伪代码

File fi = new File("E:\\input.raw");
byte[] fileContent = Files.readAllBytes(fi.toPath());

File fo= new File("E:\\output.raw");
FileOutputStream stream = new FileOutputStream(fo);

int i=0;
  for(;i<fileContent.length;i++){
  //dividing by 2 to create image with dimensions 128*128
  fileContent[i]= (byte) ((fileContent[i])/2);
    stream.write(fileContent[i]);
  }
    stream.close();

以上代码不起作用。它正在创建256 * 256维度的图像。  由于某些原因,我不允许使用任何直接缩小尺寸的库。我想知道如何将256 * 256图像转换为128 * 128尺寸?

2 个答案:

答案 0 :(得分:-1)

希望这会有所帮助

/**
 * scale image
 * 
 * @param sbi image to scale
 * @param imageType type of image
 * @param dWidth width of destination image
 * @param dHeight height of destination image
 * @param fWidth x-factor for transformation / scaling
 * @param fHeight y-factor for transformation / scaling
 * @return scaled image
 */
public static BufferedImage scale(BufferedImage sbi, int imageType, int dWidth, int dHeight, double fWidth, double fHeight) {
    BufferedImage dbi = null;
    if(sbi != null) {
        dbi = new BufferedImage(dWidth, dHeight, imageType);
        Graphics2D g = dbi.createGraphics();
        AffineTransform at = AffineTransform.getScaleInstance(fWidth, fHeight);
        g.drawRenderedImage(sbi, at);
    }
    return dbi;
}

答案 1 :(得分:-1)

使用ImageIOGraphics2D可以按照以下方式完成

BufferedImage originalImage = ImageIO.read(new File("c:\\image\\test.jpg"));
int[] dims = {128, 64, 32};

for(int dim : dims) {
    BufferedImage resizedImage = new BufferedImage(dim, dim, type);
    Graphics2D g = resizedImage.createGraphics();
    g.drawImage(originalImage, 0, 0, dim, dim, null);
    g.dispose();
    ImageIO.write(resizeImageJpg, "jpg", new File("c:\\image\\test_" + dim + "x" + dim + ".jpg"));
}