美文网首页
图片压缩

图片压缩

作者: 嘿小逗比就是你 | 来源:发表于2018-04-02 11:11 被阅读0次
    public class PictureUtils {
    
        private Logger log = LoggerFactory.getLogger(PictureUtils.class);
    
        @Autowired
        private FileStoreConfigure fileStoreConfigure;
    
        public ThumbnaiFile compressedPicture(MultipartFile jobFile, String fileName) {
            ThumbnaiFile thumbnaiFile = new ThumbnaiFile();
    
            File file = null;
            try {
                file = File.createTempFile("tmp", null);
                jobFile.transferTo(file);
                file.deleteOnExit();
            } catch (Exception e) {
                e.printStackTrace();
            }
            int[] results = getImgWidth(file);
            int widthdist = (int) (results[0] * 0.1);
            int heightdist = (int) (results[1] * 0.1);
    
            thumbnaiFile.setThumbnailWidth(String.valueOf(widthdist));
            thumbnaiFile.setThumbnailHeight(String.valueOf(heightdist));
            thumbnaiFile.setByteSize(String.valueOf(file.length()));
    
            Image src = null;
            try {
                src = javax.imageio.ImageIO.read(file);
            } catch (IOException e) {
                e.printStackTrace();
            }
            BufferedImage tag = new BufferedImage((int) widthdist,
                    (int) heightdist, BufferedImage.TYPE_INT_RGB);
    
            tag.getGraphics().drawImage(
                    src.getScaledInstance(widthdist, heightdist,
                            Image.SCALE_SMOOTH), 0, 0, null);
    
            File localFile = tmpLocalSave(tag, fileName);
    
            thumbnaiFile.setFile(localFile);
    
            return thumbnaiFile;
        }
    
        private  File tmpLocalSave(BufferedImage tag, String fileName) {
    
            FileOutputStream fos = null;
            BufferedOutputStream buffStream = null;
    
            try {
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                ImageIO.write(tag, "JPG", out);
                byte[] bytes = out.toByteArray();
                String dir = (null != fileStoreConfigure && !StringUtils.isEmpty(fileStoreConfigure.getDir())) ? fileStoreConfigure.getDir() : SystemParameter.FILE_DIR_TMP;
                File dirFile = new File(dir);
                if(!dirFile.exists()) {
                    dirFile.mkdir();
                }
                File dataFile = new File(dir + File.separator + fileName + ".JPG");
                fos = new FileOutputStream(dataFile);
                buffStream =  new BufferedOutputStream(fos);
                buffStream.write(bytes);
                buffStream.flush();
                return dataFile;
            } catch (Exception e) {
                fileName = StringUtils.isEmpty(fileName) ? "" : fileName;
                log.error("文件["+ fileName +"]保存失败,失败原因:" + e.getMessage(),e);
                return null;
            } finally {
                if(null != fos){
                    try {
                        fos.close();
                    } catch (IOException e) {
                        log.error("关闭文件失败",e);
                    }
                }
                if(null != buffStream){
                    try {
                        buffStream.close();
                    } catch (IOException e) {
                        log.error("关闭文件失败",e);
                    }
                }
            }
        }
    
        /**
         * 获取图片宽度
         *
         * @param file
         *            图片文件
         * @return 宽度
         */
        public static int[] getImgWidth(File file) {
            InputStream is = null;
            BufferedImage src = null;
            int result[] = { 0, 0 };
            try {
                is = new FileInputStream(file);
                src = javax.imageio.ImageIO.read(is);
                result[0] = src.getWidth(null); // 得到源图宽
                result[1] = src.getHeight(null); // 得到源图高
                is.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }
    }
    

    相关文章

      网友评论

          本文标题:图片压缩

          本文链接:https://www.haomeiwen.com/subject/vbmthftx.html