All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.net.wanmo.common.image.ImageUtil Maven / Gradle / Ivy

The newest version!
package cn.net.wanmo.common.image;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;

/**
 * 图片文件工具类
 * https://blog.csdn.net/ycf921244819/article/details/104594670
 */
public class ImageUtil {

    private static Logger logger = LoggerFactory.getLogger(ImageUtil.class);


    /**
     * 判断文件是否为图片
     *
     * @param file 图片文件
     * @return true 是 | false 否
     */
    public static final boolean isImage(File file) {
        boolean flag = false;
        try {
            BufferedImage bufreader = ImageIO.read(file);
            if (bufreader == null) {
                flag = false;
            } else {
                int width = bufreader.getWidth();
                int height = bufreader.getHeight();

                if (width == 0 || height == 0) {
                    flag = false;
                } else {
                    flag = true;
                }
            }
        } catch (IOException e) {
            logger.error("判断文件是否为图片异常", e);
        }
        return flag;
    }

    /**
     * 获取图片文件实际类型,若不是图片则返回null
     *
     * @param file 图片文件
     * @return 文件类型
     */
    public final static String getFormatName(File file) {
        String formatName = null;
        try {
            if (isImage(file)) { // 是图片才处理
                ImageInputStream iis = ImageIO.createImageInputStream(file);
                Iterator iter = ImageIO.getImageReaders(iis);
                if (!iter.hasNext()) {
                    return null;
                }

                ImageReader reader = iter.next();
                iis.close();
                formatName = reader.getFormatName().toLowerCase();
            }

        } catch (IOException e) {
            logger.error("获取图片 FormatName 异常", e);
        }

        return formatName;
    }

    /**
     * 获取图片后缀,优先获取文件名 点 后的后缀, 如果没有,则分析图片的 formatName
     *
     * @param file 图片
     * @return 后缀
     */
    public static String getSuffix(File file) {
        return getSuffix(file, true);
    }

    /**
     * 获取图片后缀,优先获取文件名 点 后的后缀, 如果没有,则分析图片的 formatName
     *
     * @param file         图片
     * @param isFormatName 是否取图片的 formatName
     * @return 后缀
     */
    public static String getSuffix(File file, boolean isFormatName) {
        String suffix = null;
        {
            String filename = getFilename(file);
            int lastIndexOf = filename.lastIndexOf(".");

            if (lastIndexOf == -1) {
                suffix = "";
            } else {
                suffix = filename.substring(lastIndexOf + 1);
            }
        }

        if (isFormatName && (suffix == null || "".equals(suffix.trim()))) {
            suffix = getFormatName(file);
        }

        return suffix;
    }


    /**
     * 没有后缀,则会追加后缀,
     * 否则会修改后缀
     *
     * @param file 图片文件
     * @return 结果文件
     */
    public static File renameSuffix(File file, String suffix) {
        if (file == null || !file.exists()) {
            logger.warn("文件不存在:{}", file);
            return file;
        }

        // 处理后缀
        if (suffix.startsWith(".")) {
            suffix = suffix.substring(1);
        }

        String absolutePath = file.getAbsolutePath();
        { // 组装新文件的路径
            String suffixTemp = getSuffix(file, false);

            if (suffixTemp == null || "".equals(suffixTemp.trim())) {
                absolutePath = absolutePath + "." + suffix;
            } else {
                int lastIndexOf = absolutePath.lastIndexOf(".");
                absolutePath = absolutePath.substring(0, lastIndexOf + 1) + suffix;
            }
        }

        File destFile = new File(absolutePath);
        file.renameTo(destFile);
        return destFile;
    }

    /**
     * 获取图片大小 KB
     *
     * @param file 图片
     * @return KB
     */
    public static Double getSizeKB(File file) {
        if (file == null || !file.exists()) {
            return 0.0;
        }

        return file.length() / 1024.0;
    }

    /**
     * 获取图片大小 MB
     *
     * @param file 图片
     * @return MB
     */
    public static Double getSizeMB(File file) {
        if (file == null || !file.exists()) {
            return 0.0;
        }

        return file.length() / 1024.0 / 1024.0;
    }


    /**
     * 获取文件名称
     *
     * @param file 文件
     * @return 文件名称
     */
    public static String getFilename(File file) {
        return file.getName();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy