admin
2020-03-06 ce2c33ba07d0b0cbb14ec6b37b72b19d073b15af
视频封面图裁剪bug修复
2个文件已修改
167 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java 139 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/src/main/java/org/yeshi/utils/ImageCropUtil.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java
@@ -187,8 +187,33 @@
                + type;
        return COSManager.getInstance().uploadFile(inputStream, filePath).getUrl();
    }
    private String uploadPicture(File file,String contentType) throws Exception {
    private ImgInfo uploadVideoPicture(MultipartFile filevideo) {
        try {
            File tempFile = new File(FileUtil.getCacheDir() + "/" + filevideo.getOriginalFilename());
            if (tempFile.exists())
                tempFile.delete();
            tempFile.createNewFile();
            filevideo.transferTo(tempFile);
            File destFile = new File(FileUtil.getCacheDir() + "/temp_" + filevideo.getOriginalFilename());
            // 裁剪视频封面,宽高比为2:1
            ImageCropUtil.centerCrop(tempFile, destFile, 2.0f);
            BufferedImage sourceImg = ImageIO.read(new FileInputStream(destFile));
            ImgInfo info = new ImgInfo();
            int width = sourceImg.getWidth();
            int height = sourceImg.getHeight();
            String picLink = uploadPicture(destFile, filevideo.getContentType());
            info.setH(height);
            info.setW(width);
            info.setUrl(picLink);
            return info;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    private String uploadPicture(File file, String contentType) throws Exception {
        InputStream inputStream = new FileInputStream(file);
        String type = contentType.substring(contentType.indexOf("/") + 1);
        String filePath = FilePathEnum.goodsEvaluate.getPath() + UUID.randomUUID().toString().replace("-", "") + "."
@@ -248,36 +273,28 @@
                if (StringUtil.isNullOrEmpty(videoUrl)) {
                    throw new GoodsEvaluateException(1, "视频链接不能为空");
                }
                InputStream inputStream = filevideo.getInputStream();
                File destFile = new File(FileUtil.getCacheDir() + "/temp_" + filevideo.getName());
                // 裁剪视频封面,宽高比为2:1
                ImageCropUtil.centerCrop(inputStream, destFile, 2.0f);
                BufferedImage sourceImg = ImageIO.read(new FileInputStream(destFile));
                int width = sourceImg.getWidth();
                int height = sourceImg.getHeight();
                String picLink =  uploadPicture(destFile,filevideo.getContentType());
                ImgInfo info = uploadVideoPicture(filevideo);
                if (info == null)
                    throw new GoodsEvaluateException(2, "视频图片上传失败");
                if (imgVideo != null) {
                    String url = imgVideo.getUrl();
                    if (!StringUtil.isNullOrEmpty(url)) {
                        listDel.add(url);
                    }
                    imgVideo.setUrl(picLink);
                    imgVideo.setUrlHD(picLink);
                    imgVideo.setUrl(info.getUrl());
                    imgVideo.setUrlHD(info.getUrl());
                } else {
                    imgVideo = new ImgInfo();
                    imgVideo.setId(UUID.randomUUID().toString().replace("-", ""));
                    imgVideo.setLarge(true);
                    imgVideo.setPid(pid);
                    imgVideo.setUrl(picLink);
                    imgVideo.setUrlHD(picLink);
                    imgVideo.setUrl(info.getUrl());
                    imgVideo.setUrlHD(info.getUrl());
                    imgVideo.setVideoUrl(videoUrl);
                    imgVideo.setType(ImgEnum.video);
                }
                imgVideo.setW(width);
                imgVideo.setH(height);
                imgVideo.setW(info.getW());
                imgVideo.setH(info.getH());
            }
        }
@@ -598,35 +615,29 @@
                    throw new GoodsEvaluateException(1, "视频链接不能为空");
                }
                InputStream inputStream = filevideo.getInputStream();
                File destFile = new File(FileUtil.getCacheDir() + "/temp_" + filevideo.getName());
                // 裁剪视频封面,宽高比为2:1
                ImageCropUtil.centerCrop(inputStream, destFile, 2.0f);
                ImgInfo info = uploadVideoPicture(filevideo);
                if (info == null)
                    throw new GoodsEvaluateException(2, "视频图片上传失败");
                BufferedImage sourceImg = ImageIO.read(new FileInputStream(destFile));
                int width = sourceImg.getWidth();
                int height = sourceImg.getHeight();
                String picLink = uploadPicture(destFile,filevideo.getContentType());
                if (imgVideo != null) {
                    String url = imgVideo.getUrl();
                    if (!StringUtil.isNullOrEmpty(url)) {
                        listDel.add(url);
                    }
                    imgVideo.setUrl(picLink);
                    imgVideo.setUrlHD(picLink);
                    imgVideo.setUrl(info.getUrl());
                    imgVideo.setUrlHD(info.getUrl());
                } else {
                    imgVideo = new ImgInfo();
                    imgVideo.setId(UUID.randomUUID().toString().replace("-", ""));
                    imgVideo.setLarge(true);
                    imgVideo.setPid(pid);
                    imgVideo.setUrl(picLink);
                    imgVideo.setUrlHD(picLink);
                    imgVideo.setUrl(info.getUrl());
                    imgVideo.setUrlHD(info.getUrl());
                    imgVideo.setVideoUrl(videoUrl);
                    imgVideo.setType(ImgEnum.video);
                }
                imgVideo.setW(width);
                imgVideo.setH(height);
                imgVideo.setW(info.getW());
                imgVideo.setH(info.getH());
            }
        }
@@ -1014,17 +1025,12 @@
            if (filevideo != null) {
                removePicture(videoPic);
                InputStream inputStream = filevideo.getInputStream();
                File destFile = new File(FileUtil.getCacheDir() + "/temp_" + filevideo.getName());
                // 裁剪视频封面,宽高比为2:1
                ImageCropUtil.centerCrop(inputStream, destFile, 2.0f);
                BufferedImage sourceImg = ImageIO.read(new FileInputStream(destFile));
                width = sourceImg.getWidth();
                height = sourceImg.getHeight();
                String picLink =  uploadPicture(destFile,filevideo.getContentType());
                videoPic = picLink;
                ImgInfo info = uploadVideoPicture(filevideo);
                if (info == null)
                    throw new GoodsEvaluateException(2, "视频图片上传失败");
                videoPic = info.getUrl();
                width=info.getW();
                height=info.getH();
            }
            MultipartFile activityfile = fileRequest.getFile("activityfile");
@@ -1137,39 +1143,29 @@
            if (filevideo != null) {
                if (StringUtil.isNullOrEmpty(videoUrl)) {
                    throw new GoodsEvaluateException(1, "视频链接不能为空");
                }
                InputStream inputStream = filevideo.getInputStream();
                File destFile = new File(FileUtil.getCacheDir() + "/temp_" + filevideo.getName());
                // 裁剪视频封面,宽高比为2:1
                ImageCropUtil.centerCrop(inputStream, destFile, 2.0f);
                BufferedImage sourceImg = ImageIO.read(new FileInputStream(destFile));
                int width = sourceImg.getWidth();
                int height = sourceImg.getHeight();
                String picLink =  uploadPicture(destFile,filevideo.getContentType());
                }
                ImgInfo info = uploadVideoPicture(filevideo);
                if (info == null)
                    throw new GoodsEvaluateException(2, "视频图片上传失败");
                if (imgVideo != null) {
                    String url = imgVideo.getUrl();
                    if (!StringUtil.isNullOrEmpty(url)) {
                        listDel.add(url);
                    }
                    imgVideo.setUrl(picLink);
                    imgVideo.setUrlHD(picLink);
                    imgVideo.setUrl(info.getUrl());
                    imgVideo.setUrlHD(info.getUrl());
                } else {
                    imgVideo = new ImgInfo();
                    imgVideo.setId(UUID.randomUUID().toString().replace("-", ""));
                    imgVideo.setLarge(true);
                    imgVideo.setPid(pid);
                    imgVideo.setUrl(picLink);
                    imgVideo.setUrlHD(picLink);
                    imgVideo.setUrl(info.getUrl());
                    imgVideo.setUrlHD(info.getUrl());
                    imgVideo.setVideoUrl(videoUrl);
                    imgVideo.setType(ImgEnum.video);
                }
                imgVideo.setW(width);
                imgVideo.setH(height);
                imgVideo.setW(info.getW());
                imgVideo.setH(info.getH());
            }
            activityFile = fileRequest.getFile("activityFile");
@@ -1445,7 +1441,8 @@
    }
    @Override
//    @Cacheable(value = "dynamicCache", key = "'queryMaterialsCache-'+#start+'-'+#type")
    // @Cacheable(value = "dynamicCache", key =
    // "'queryMaterialsCache-'+#start+'-'+#type")
    public List<GoodsEvaluate> queryMaterialsCache(int start, int count, int type) throws Exception {
        List<GoodsEvaluate> list = goodsEvaluateDao.queryValid(start, count, type);
        if (list == null) {
@@ -1453,10 +1450,10 @@
        }
        Date now = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        List<GoodsEvaluate> listNew = new ArrayList<>();
        for (GoodsEvaluate goodsEvaluate : list) {
            GoodsEvaluate evaluateNew = new GoodsEvaluate();
            try {
                PropertyUtils.copyProperties(evaluateNew, goodsEvaluate);
@@ -1464,7 +1461,7 @@
                e.printStackTrace();
                continue;
            }
            int comment = 0;
            List<CommentInfo> comments = evaluateNew.getComments();
            if (comments != null && comments.size() > 0) {
@@ -1529,7 +1526,7 @@
                    }
                }
            }
            listNew.add(evaluateNew);
        }
@@ -1541,7 +1538,7 @@
                updateGoodInfo(listOBJ);
            }
        });
        return listNew;
    }
utils/src/main/java/org/yeshi/utils/ImageCropUtil.java
@@ -6,6 +6,7 @@
import java.io.InputStream;
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.Thumbnails.Builder;
import net.coobird.thumbnailator.geometry.Positions;
/**
@@ -28,6 +29,33 @@
            throws FileNotFoundException, Exception {
        if (sourceImage==null)
            throw new FileNotFoundException();
        BufferedImage image = Thumbnails.of(sourceImage).scale(1.0f).asBufferedImage();
        int width = image.getWidth();
        int height = image.getHeight();
        int newWidth = 0;
        int newHeight = 0;
        if (width > ratio * height) {// 以高为主
            newHeight = height;
            newWidth = (int) (newHeight * ratio);
        } else {// 以宽为主
            newWidth = width;
            newHeight = (int) (newWidth / ratio);
        }
        if (destImage.exists())
            destImage.delete();
        Thumbnails.of(sourceImage).sourceRegion(Positions.CENTER, newWidth, newHeight).scale(1.0)
                .toFile(destImage.getPath());
    }
    public static void centerCrop(File sourceImage, File destImage, float ratio)
            throws FileNotFoundException, Exception {
        if (sourceImage==null)
            throw new FileNotFoundException();
        BufferedImage image = Thumbnails.of(sourceImage).scale(1.0f).asBufferedImage();
        int width = image.getWidth();
        int height = image.getHeight();