文档章节

工具类:图片压缩处理

阿呆的柜子叫小羊
 阿呆的柜子叫小羊
发布于 2015/10/26 17:28
字数 451
阅读 65
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

package com.hengshan.yundonggo.util;


import java.io.*;

import java.awt.*;

import java.awt.image.*;

import javax.imageio.ImageIO;

import com.sun.image.codec.jpeg.*;


/**

 * 图片压缩处理

 * 

 * @author dgy

 *

 */

public class ImgCompress {

private Image img;

private int width;

private int height;


public static String startCompress(File photo, String username, String imgname) {

String src = null;

try {

ImgCompress imgCom = new ImgCompress(photo);

src = imgCom.resizeFix(400, 400, username, imgname);

} catch (Exception e) {

e.printStackTrace();

}

return src;

}


/**

* 构造函数

*/

public ImgCompress(File photo) throws IOException {

img = ImageIO.read(photo); // 构造Image对象

width = img.getWidth(null); // 得到源图宽

height = img.getHeight(null); // 得到源图长

}


/**

* 按照宽度还是高度进行压缩

* @param w

*            int 最大宽度

* @param h

*            int 最大高度

*/

public String resizeFix(int w, int h, String username, String imgname) throws IOException {

String src;

if (width / height > w / h) {

src = resizeByWidth(w, username, imgname);

} else {

src = resizeByHeight(h, username, imgname);

}

return src;

}


/**

* 以宽度为基准,等比例放缩图片

* @param w

*            int 新宽度

*/

public String resizeByWidth(int w, String username, String imgname) throws IOException {

int h = (int) (height * w / width);

String src = resize(w, h, username, imgname);

return src;

}


/**

* 以高度为基准,等比例缩放图片

* @param h

*            int 新高度

*/

public String resizeByHeight(int h, String username, String imgname) throws IOException {

int w = (int) (width * h / height);

String src = resize(w, h, username, imgname);

return src;

}


/**

* 强制压缩/放大图片到固定的大小

* @param w

*            int 新宽度

* @param h

*            int 新高度

*/

@SuppressWarnings("restriction")

public String resize(int w, int h, String username, String imgname) throws IOException {

// SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的优先级比速度高生成的图片质量比较好 但速度慢

BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);

image.getGraphics().drawImage(img, 0, 0, w, h, null); // 绘制缩小后的图

// 保存到服务器

String path1 = "E:" + File.separator + "img" + File.separator + username;

File photo = new File(path1);

if (!photo.exists() && !photo.isDirectory()) {

photo.mkdirs();

}

String path = path1 + File.separator + imgname + ".jpg";

File destFile = new File(path);

FileOutputStream out = new FileOutputStream(destFile); // 输出到文件流

// 可以正常实现bmp、png、gif转jpg

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

encoder.encode(image); // JPEG编码

out.close();

return  username + "/" + imgname + ".jpg";

}


public static void main(String[] args) {

File file = new File("D://hy.jpg");

String src = ImgCompress.startCompress(file, "suoluetu", file.getName());

System.out.println(src);

}

}


© 著作权归作者所有

阿呆的柜子叫小羊
粉丝 0
博文 5
码字总数 1335
作品 0
合川
程序员
私信 提问
Android 图片处理避免出现oom的方法

1. 通过设置采样率压缩 res资源图片压缩 decodeResource uri图片压缩 decodeStream 本地File url图片压缩 根据显示的图片大小进行SampleSize的计算 附:宽高dp值转px的工具类 以上三种工具类的...

燊在锦官城_
2017/09/11
0
0
罗友之家服务器文件管理升级小记

元旦前后,网站增加了直播功能,但发现,有时候打开页面,网站反应很慢。 吓死宝宝了,以为服务器出了啥子问题。 后来发现,由于上传图片,当一个页面有十多张图片,每个图片都有一兆多的时候...

yan
2016/02/04
132
0
最后的一页/TakePhoto

TakePhoto 简介 是一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库,目前最新版本4.0.3。 3.0以下版本及API说明,详见TakePhoto2.0+。 Take...

最后的一页
2017/09/20
0
0
iOS安装包瘦身指南

先看下Apple对安装包大小的限制: 资源优化 1.删除无用资源 解压ipa文件,检查是否有无用资源存在。 现在应该没有APP需要支持iPhone4以下的机型了,所以1X的图片可以全部删掉。3X的图片是保留...

秦无炎
2016/11/03
335
0
Android性能优化——图片优化(二)

图片的加载和显示是每个商业APP都避免不了的问题,对于图片重度依赖类APP,例如壁纸类应用,图片社交类应用,对于图片的处理将会影响到整个APP的用户体验。 在正式了解Android中如何优化图片...

落地吃鸡
2017/04/21
361
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊rocketmq producer的batch

序 本文主要研究一下rocketmq producer的batch batch rocketmq-client-4.6.0-sources.jar!/org/apache/rocketmq/client/producer/DefaultMQProducer.java public class DefaultMQProducer ex......

go4it
昨天
5
0
Delphi中的延时

开发过程中经常会需要使用到延时功能,Delphi中有不少实现延时的方法,网上已有不少文章做过说明和分析,但本着实践出真知的态度,还是亲自动手研究一番心里比较踏实。 常用的延时方法 Slee...

天朝八阿哥
昨天
5
0
001-Consul

Consul安装(单节点) mkdir -p /data/consulcd /data/consulwget https://releases.hashicorp.com/consul/1.6.2/consul_1.6.2_linux_amd64.zipunzip consul_1.6.2_linux_amd64.zip复制c......

伟大源于勇敢的开始
昨天
5
0
nginx + frp 搭建内网穿透

上一个项目是开发微信公众号,由于微信的各种烦人操作,只能到处找内网映射工具 ngrok也用过,花生壳也用过 都不怎么稳定,无意间听说了frp,本着一颗折腾的心搭建了一下,结果发现很不错,就...

lineasy
昨天
8
0
构建CRD工程 - 程序员学点xx 43 k8s

Kubernetes -3- <!--more--> <center>这是yann的第98篇分享</center> [TOC] 本日状态: 帮同事排了一天bug。 Kubernetes -3- <!--more--> 这是yann的第98篇分享 第 1 部分 承前 昨天用视屏的方......

tmp4
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部