ImageIO 实现图片缩放

  • Post author:
  • Post category:其他


图片的缩放是在内存中进行完成的,用到了BufferedImage中的方法(

getScaledInstance

)生成缩放的图片;其中方法中需要传递一个图片压缩算法,Image中提供的图片压缩算法一共包含以下几类:

  1. Image.SCALE_DEFAULT:默认的缩放算法
  2. Image.SCALE_FAST:缩放速度优先
  3. Image.SCALE_SMOOTH:图像平滑度优先
  4. Image.SCALE_REPLICATE:使用 ReplicaScaleFilter 类中体现的图像缩放算法
  5. Image.SCALE_AREA_AVERAGING:使用面积平均图像缩放算法

下面我们结合上面的描述,写一个图片压缩的方法:

/**
 * 按照高度进行缩放
 * @param bufferedImage 内存图片
 * @param targetHeight 目标高度
 * @return 内存图片
 */
private BufferedImage zoom(BufferedImage bufferedImage, int targetHeight) {
    // 获取原始图片的宽度和高度
    int width = bufferedImage.getWidth();
    int height = bufferedImage.getHeight();

    // 计算目标图片的宽度
    int targetWidth = width * targetHeight / height;
    // 创建新的内存图片
    BufferedImage newBufferedImage = new BufferedImage(targetWidth, targetHeight, bufferedImage.getType());
    // 创建画图对象
    Graphics2D graphics = newBufferedImage.createGraphics();
    // 获取缩略图片并画到画布上
    graphics.drawImage(bufferedImage.getScaledInstance(targetWidth, targetHeight, Image.SCALE_FAST), 0, 0, null);
    // 关闭画图对象
    graphics.dispose();
    return newBufferedImage;
}

有了图片压缩的方法,我们结合ImageIO提供的工具类就可以完成一个图片缩略图的生成,具体的代码如下:

// 读取图片到内存
BufferedImage bufferedImage = ImageIO.read(new File("/home/mointor/mobile.png"));
// 压缩图片
BufferedImage newBufferedImage = zoom(bufferedImage, 100);
// 写出图片到文件
ImageIO.write(newBufferedImage, "png", new File("/home/mointor/mobile2.png"));

以上就完成了图片缩略图的生成。



版权声明:本文为m1729339749原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。