java图片压缩问题求解

l_q_p_l 2017-12-12 05:06:58
目前,搜索到的大多数都是使用bufferedImage.getGraphics().drawimage方法压缩,但是这个方法是立即返回的。目前网上搜索到的这种方式压缩对这种异步都没有进行特殊的操作,他们是怎么保证后续操作正常进行的???
...全文
124 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
l_q_p_l 2017-12-13
  • 打赏
  • 举报
回复
引用 3 楼 Inhibitory 的回复:
可以试试 Google 的 Thumbnails
import net.coobird.thumbnailator.Thumbnails;

public class GoogleThumbnails {
    public static void main(String[] args) throws Exception {

        Thumbnails.of("/Users/Biao/Pictures/Rock_stars_by_vladstudio2.jpg")
                .size(300, 300).outputQuality(0.7)
                .toFile("/Users/Biao/Desktop/x.jpg");
    }
}
目前就是用这个
Inhibitory 2017-12-12
  • 打赏
  • 举报
回复
可以试试 Google 的 Thumbnails
import net.coobird.thumbnailator.Thumbnails;

public class GoogleThumbnails {
    public static void main(String[] args) throws Exception {

        Thumbnails.of("/Users/Biao/Pictures/Rock_stars_by_vladstudio2.jpg")
                .size(300, 300).outputQuality(0.7)
                .toFile("/Users/Biao/Desktop/x.jpg");
    }
}
l_q_p_l 2017-12-12
  • 打赏
  • 举报
回复
目前我的需求是将图片压缩后转base64,用上面的代码会造成图片没压缩完就转base64了,目前用的Thumbnailator包,不过这压缩大图真的慢
l_q_p_l 2017-12-12
  • 打赏
  • 举报
回复
贴一段搜索到的代码

/** 
     * 采用指定宽度、高度或压缩比例 的方式对图片进行压缩 
     * @param imgsrc 源图片地址 
     * @param imgdist 目标图片地址 
     * @param widthdist 压缩后图片宽度(当rate==null时,必传) 
     * @param heightdist 压缩后图片高度(当rate==null时,必传) 
     * @param rate 压缩比例  
     */  
    public static void reduceImg(String imgsrc, String imgdist, int widthdist,  
            int heightdist, Float rate) {  
        try {  
            File srcfile = new File(imgsrc);  
            // 检查文件是否存在  
            if (!srcfile.exists()) {  
                return;  
            }  
            // 如果rate不为空说明是按比例压缩  
            if (rate != null && rate > 0) {  
                // 获取文件高度和宽度  
                int[] results = getImgWidth(srcfile);  
                if (results == null || results[0] == 0 || results[1] == 0) {  
                    return;  
                } else {  
                    widthdist = (int) (results[0] * rate);  
                    heightdist = (int) (results[1] * rate);  
                }  
            }  
            // 开始读取文件并进行压缩  
            Image src = javax.imageio.ImageIO.read(srcfile);  
            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);  
  
            FileOutputStream out = new FileOutputStream(imgdist);  
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
            encoder.encode(tag);  
            out.close();  
  
        } catch (IOException ex) {  
            ex.printStackTrace();  
        }  
    } 

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧