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();
    }

    }

    }

    }

  • 相关阅读:
    sqlplus时报Linux-x86_64 Error: 13: Permission denied
    thrift之TTransport层的缓存传输类TBufferedTransport和缓冲基类TBufferBase
    Java实现 蓝桥杯 算法提高 新建Microsoft world文档
    Java实现 蓝桥杯 算法提高 新建Microsoft world文档
    Java实现 蓝桥杯 算法提高 快乐司机
    Java实现 蓝桥杯 算法提高 快乐司机
    Java实现 蓝桥杯 算法提高 队列操作
    Java实现 蓝桥杯 算法提高 队列操作
    Java实现 蓝桥杯 算法提高 文本加密
    Java实现 蓝桥杯 算法提高 合并石子
  • 原文地址:https://www.cnblogs.com/haorun/p/6187039.html
Copyright © 2011-2022 走看看