java 图片压缩 缩放

废话不多说,直接上代码,静态方法可直接调用,中间用流来处理的


 /**
   * 图片缩放(未考虑多种图片格式和等比例缩放)
   * @param filePath 图片路径
   * @param height 高度
   * @param width 宽度
   * @param picType 图片格式
   * @param bb 比例不对时是否需要补白
  */
  @Deprecated
  public static byte[] resize(byte[] imageBuffer, int height, int width, String picType, boolean bb) {
    byte[] targetBuffer = null;
    try {
      BufferedImage fromImage = ImageIO.read(new ByteArrayInputStream(imageBuffer));
      BufferedImage scaleImage = zoomImage(fromImage, width, height);
      targetBuffer = writeHighQuality(scaleImage);
    } catch (IOException e) {
      logger.error("ImageUtils Resize Exception." , e);
    }
    return targetBuffer;
  }


/**
   * @param im
   *            原始图像
   * @param resizeTimes
   *            倍数,比如0.5就是缩小一半,0.98等等double类型
   * @return 返回处理后的图像
   */
  public static BufferedImage zoomImage(BufferedImage im, int toWidth, int toHeight) {
    /* 原始图像的宽度和高度 */
    int width = im.getWidth();
    int height = im.getHeight();

    /* 调整后的图片的宽度和高度 */
    //    int toWidth = (int) (Float.parseFloat(String.valueOf(width)) * resizeTimes);
    //    int toHeight = (int) (Float.parseFloat(String.valueOf(height)) * resizeTimes);

    /* 新生成结果图片 */
    BufferedImage result = new BufferedImage(toWidth, toHeight, BufferedImage.TYPE_INT_RGB);

    result.getGraphics().drawImage(im.getScaledInstance(toWidth, toHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null);
    return result;
  }
  
  
  
  public static byte[] writeHighQuality(BufferedImage im) {
    try {
      ByteArrayOutputStream imageStream = new ByteArrayOutputStream();
      JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(imageStream);
      JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(im);
      /* 压缩质量 */
      jep.setQuality(1f, true);
      encoder.encode(im, jep);
      /* 近JPEG编码 */
      imageStream.close();
      return imageStream.toByteArray();
    } catch (Exception e) {
      e.printStackTrace();
      return null;
    }
    
  }


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中可以使用 ImageIO 类和 BufferedImage 类来进行图片压缩操作。以下是一个简单的示例代码: ```java import java.awt.Dimension; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class ImageCompressor { public static void main(String[] args) throws IOException { File inputFile = new File("input.jpg"); BufferedImage inputImage = ImageIO.read(inputFile); int maxWidth = 800; int maxHeight = 600; Dimension newDimension = getScaledDimension(new Dimension(inputImage.getWidth(), inputImage.getHeight()), new Dimension(maxWidth, maxHeight)); BufferedImage outputImage = new BufferedImage(newDimension.width, newDimension.height, BufferedImage.TYPE_INT_RGB); outputImage.getGraphics().drawImage(inputImage.getScaledInstance(newDimension.width, newDimension.height, Image.SCALE_SMOOTH), 0, 0, null); File outputFile = new File("output.jpg"); ImageIO.write(outputImage, "jpg", outputFile); } public static Dimension getScaledDimension(Dimension imageSize, Dimension boundary) { int width = imageSize.width; int height = imageSize.height; int maxWidth = boundary.width; int maxHeight = boundary.height; double ratio = Math.min((double) maxWidth / width, (double) maxHeight / height); return new Dimension((int) (width * ratio), (int) (height * ratio)); } } ``` 上述代码中,首先读取一张图片(假设为 input.jpg),然后指定最大宽度和最大高度进行压缩。使用 `getScaledDimension` 方法计算新的宽度和高度,然后创建一个新的 `BufferedImage` 对象并将原始图片缩放到新的尺寸,最后将新的图片保存到文件中(假设为 output.jpg)。 需要注意的是,这里使用的是 `Image.SCALE_SMOOTH` 参数,表示使用平滑缩放算法,可以得到更好的压缩效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值