zoukankan      html  css  js  c++  java
  • Java控制图片按比例缩放- (注意内存释放)

    package mytiny.com.common;

    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.File;

    import javax.imageio.ImageIO;

    public class ImageZipUtil {

    public static void main(String[] args) {
    zipWidthHeightImageFile(new File("D:\3.png"), new File("D:\3.png"), 375, 180, 0.8f);

    // System.out.println("ok");
    }

    /**
    * 根据设置的宽高等比例压缩图片文件<br>
    * 先保存原文件,再压缩、上传
    *
    * @param oldFile
    * 要进行压缩的文件
    * @param newFile
    * 新文件
    * @param width
    * 宽度 //设置宽度时(高度传入0,等比例缩放)
    * @param height
    * 高度 //设置高度时(宽度传入0,等比例缩放)
    * @param quality
    * 质量
    * @return 返回压缩后的文件的全路径
    */
    public static String zipImageFile(File oldFile, File newFile, int width, int height, float quality) {
    if (oldFile == null) {
    return null;
    }
    try {
    /** 对服务器上的临时文件进行处理 */
    Image srcFile = ImageIO.read(oldFile);
    int w = srcFile.getWidth(null);
    int h = srcFile.getHeight(null);
    double bili;
    if (width > 0) {
    bili = width / (double) w;
    height = (int) (h * bili);
    } else {
    if (height > 0) {
    bili = height / (double) h;
    width = (int) (w * bili);
    }
    }

    String srcImgPath = newFile.getAbsoluteFile().toString();
    // System.out.println(srcImgPath);
    String subfix = "jpg";
    subfix = srcImgPath.substring(srcImgPath.lastIndexOf(".") + 1, srcImgPath.length());

    BufferedImage buffImg = null;
    if (subfix.equals("png")) {
    buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    } else {
    buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    }

    Graphics2D graphics = buffImg.createGraphics();
    graphics.setBackground(new Color(255, 255, 255));
    graphics.setColor(new Color(255, 255, 255));
    graphics.fillRect(0, 0, width, height);
    graphics.drawImage(srcFile.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);

    ImageIO.write(buffImg, subfix, new File(srcImgPath));

    } catch (Exception e) {
    e.printStackTrace();
    }
    return newFile.getAbsolutePath();
    }

    /**
    * 按设置的宽度高度压缩图片文件<br>
    * 先保存原文件,再压缩、上传
    *
    * @param oldFile
    * 要进行压缩的文件全路径
    * @param newFile
    * 新文件
    * @param width
    * 宽度
    * @param height
    * 高度
    * @param quality
    * 质量
    * @return 返回压缩后的文件的全路径
    */
    public static boolean zipWidthHeightImageFile(File oldFile, File newFile, int width, int height, float quality) {
    if (oldFile == null) {
    return false;
    }
    Image srcFile = null;
    BufferedImage buffImg = null;
    try {
    /** 对服务器上的临时文件进行处理 */
    srcFile = ImageIO.read(oldFile);

    String srcImgPath = newFile.getAbsoluteFile().toString();
    // System.out.println(srcImgPath);
    String subfix = "jpg";
    subfix = srcImgPath.substring(srcImgPath.lastIndexOf(".") + 1, srcImgPath.length());

    if (subfix.equals("png")) {
    buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    } else {
    buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    }

    Graphics2D graphics = buffImg.createGraphics();
    graphics.setBackground(new Color(255, 255, 255));
    graphics.setColor(new Color(255, 255, 255));
    graphics.fillRect(0, 0, width, height);
    graphics.drawImage(srcFile.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);

    ImageIO.write(buffImg, subfix, new File(srcImgPath));
    return true;

    } catch (Exception e) {
    e.printStackTrace();
    return false;
    } finally {
    if (srcFile != null) {
    srcFile.flush();
    }
    if (buffImg != null) {
    buffImg.flush();
    }

    }

    }

    }

  • 相关阅读:
    每日一题
    每日一题
    每日一题
    每日一题
    GitLab 部署
    Golang Web开发之Gin入门
    Golang消息队列之NSQ
    Golang操作Redis
    Golang操作MySQL
    Golang Json数据处理方法
  • 原文地址:https://www.cnblogs.com/haorun/p/6187039.html
Copyright © 2011-2022 走看看