图片处理相关工具类

ImageUtil 对图片详情进行处理
package com.imooc.myo2o.util;

import java.io.IOException;

import com.imooc.myo2o.dto.ImageHolder;
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;

import javax.imageio.ImageIO;
import java.io.File;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * 图片处理
 * @author Zhm
 * @date 2020/3/24 10:34
 **/
public class ImageUtil {

    //获取文件路径
    private static String bastPath =Thread.currentThread().getContextClassLoader()
            .getResource("").getPath();
    //获取当前时间
    private static final SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
    //获取随机数
    private static final Random r= new Random();

    /**
     * 处理详情图,并返回新生成图片的相对值路径
     * @param thumbnail
     * @param targetAddr
     * @return
     */
    public static String generateNormalImg(ImageHolder thumbnail, String targetAddr){
        String realFileName = getRandomFileName();
        String extension = getFileExtension(thumbnail.getImageName());
        makeDirPath(targetAddr);
        String relativeAddr = targetAddr + realFileName + extension;
        File dest = new File(PathUtil.getImgBasePath() + relativeAddr);
        try {
            //对图片进行修改 ,加水印和调整尺寸,由于我这个项目暂时不需要加水印所以给注释了
            Thumbnails.of(thumbnail.getImage()).size(337, 640)
                    //.of(thumbnail).size(200, 200)
                    /*加水印*/
                    //.watermark(Positions.BOTTOM_RIGHT,ImageIO.read(new File(bastPath+"/shuiyin.png")),0.25f)
                    //.outputQuality(0.8f)
                    .toFile(dest);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return relativeAddr;
    }

    /**
     * 创建图片缩略图
     * @param thumbnail
     * @param targetAddr
     * @return
     */
    public static String generateThumbnail(ImageHolder thumbnail, String targetAddr) {
        String realFileName = getRandomFileName();
        String extension = getFileExtension(thumbnail.getImageName());
        makeDirPath(targetAddr);
        String relativeAddr = targetAddr + realFileName + extension;
        File dest = new File(PathUtil.getImgBasePath() + relativeAddr);
        try {
            Thumbnails.of(thumbnail.getImage()).size(200, 200)
                    //.of(thumbnail).size(200, 200)
                    //.watermark(Positions.BOTTOM_RIGHT,ImageIO.read(new File(bastPath+"/shuiyin.png")),0.25f)
                    //.outputQuality(0.8f)
                    .toFile(dest);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return relativeAddr;
    }

    /**
     * 创建目标路径所涉及的目录。如果不存在的话需要自动创建
     * @param targetAddr
     */
    private static void makeDirPath(String targetAddr) {
        String realFileParenPath = PathUtil.getImgBasePath()+targetAddr;
        File dirPath = new File(realFileParenPath);
        if(!dirPath.exists()){
            dirPath.mkdirs();
        }
    }

    /**
     * 获取输入文件的扩展名
     * @param fileName
     * @return
     */
    private static String getFileExtension(String fileName) {
        return fileName.substring(fileName.lastIndexOf("."));
    }

    /**
     * 生成随机文件名,当前时间+五位随机数
     * @return
     */
    public static String getRandomFileName() {
        //获取随机五位数
        int rannum = r.nextInt(89999)+10000;
        String nowTimeStr = sDateFormat.format(new Date());
        return nowTimeStr+rannum;
    }

    /**
     * 进行测试
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        Thumbnails.of(new File("D:/haizeiwang.jpg"))
            .size(200,200)
            .watermark(Positions.BOTTOM_RIGHT,
                    ImageIO.read(new File(bastPath+"/shuiyin.png")),0.25f)
                .outputQuality(0.8f)
            .toFile("D:/haizeiwangnew.jpg");

    }

    /**
     * storePath是文件的路径还是目录的路径
     * 如果是文件的路径的话则删除文件
     * 如果是目录路径的话则删除该目录下所有的文件
     * @param storePath
     * @return
     */
    public static void deleteFileOrPath(String storePath){
        File fileOrPath = new File(PathUtil.getImgBasePath()+storePath);
        if(fileOrPath.exists()){
            if(fileOrPath.isDirectory()){
                File files[] = fileOrPath.listFiles();
                for (int i = 0; i < fileOrPath.length(); i++) {
                    files[i].delete();
                }
            }
            fileOrPath.delete();
        }
    }
}

PathUtil 对文件的路径进行处理
package com.imooc.myo2o.util;

/**
 * 对路径进行设置
 * @author Zhm
 * @date 2020/3/24 10:55
 **/
public class PathUtil {
    private static String seperator = System.getProperty("file.separator");

    /**
     * 返回项目图片的根路径
     * @return
     */
    public static String getImgBasePath(){
        String os=System.getProperty("os.name");
        String basePath= "";
        //设置文件存储的文件夹
        if(os.toLowerCase().startsWith("win")){
            //如果是win系统就按照这个方式进行创建
            basePath = "D:/projectdev/image/";
        }else {
            //其他系统按照以下方式进行创建
            basePath = "/home/xiangze/image";
        }
        basePath = basePath.replace("/",seperator);
        return basePath;
    }

    /**
     * 依据不同的需求返回项目图片的子路径
     * @param shopId
     * @return
     */
    public static String getShopImagePath(long shopId){
        //这是在数据库的存储的路径
        String imagePath = "upload/item/shop/"+shopId+"/";
        return imagePath.replace("/",seperator);
    }

    /*实际存储路径是 basePath + imagePath,所以在前台显示图片时,需要在Tomcat里面加上
    <Context docBase="myo2o" path="/myo2o" reloadable="true"
					source="org.eclipse.jst.jee.server:myo2o" />
				<Context docBase="D:\projectdev\image\upload" path="/upload" />*/
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lemon20120331

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值