2019独角兽企业重金招聘Python工程师标准>>>

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;import javax.imageio.IIOException;
import javax.imageio.ImageIO;public class ImageUtils {/*** 对图片进行放大或者压缩* * @param srcPath*            原始图片路径(绝对路径)* @param newPath*            处理后图片路径(绝对路径)* @param w*            目标宽度* @param h*            目标高度* @return 是否处理成功*/public static boolean zoomInImage(String srcPath, String newPath,Integer w, Integer h) {BufferedImage bufferedImage = null;try {File file = new File(srcPath);if (file.canRead()) {try{bufferedImage = ImageIO.read(file);}catch(IIOException e){e.printStackTrace();return false;}} else {System.out.println("文件不存在或没有权限读取:" + srcPath);return false;}} catch (IOException e) {// TODO: 打印日志e.printStackTrace();return false;}if (bufferedImage != null) {bufferedImage = zoomInImage(bufferedImage, w, h);try {// 保存修改后的图像,全部保存为JPG格式ImageIO.write(bufferedImage, "JPG", new File(newPath)); System.out.println("压缩后的图片已保存到磁盘");} catch (IOException e) {// TODO 打印错误信息e.printStackTrace();return false;}}return true;}/*** 对图片进行放大或者压缩处理* * @param originalImage*            原始图片* @param times*            放大倍数* @return*/public static BufferedImage zoomInImage(BufferedImage originalImage,Integer width, Integer height) {BufferedImage newImage = new BufferedImage(width, height,originalImage.getType());Graphics g = newImage.getGraphics();g.drawImage(originalImage, 0, 0, width, height, null);System.out.println("图片压缩成功");g.dispose();return newImage;}/*** 将图片写入到磁盘* * @param img*            图片数据流* @param fileName*            文件保存时的名称*/public static void writeImageToDisk(byte[] img, String fileSrc) {try {File file = new File( fileSrc);FileOutputStream fops = new FileOutputStream(file);fops.write(img);fops.flush();fops.close();System.out.println("原图已下载到本地磁盘");} catch (Exception e) {e.printStackTrace();}}/*** 根据地址获得数据的字节流* * @param strUrl*            网络连接地址* @return*/public static byte[] getImageFromNetByUrl(String strUrl) {try {URL url = new URL(strUrl);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(5 * 1000);InputStream inStream = conn.getInputStream();// 通过输入流获取图片数据byte[] btImg = readInputStream(inStream);// 得到图片的二进制数据return btImg;} catch (Exception e) {e.printStackTrace();}return null;}/*** 从输入流中获取数据* * @param inStream*            输入流* @return* @throws Exception*/public static byte[] readInputStream(InputStream inStream) throws Exception {ByteArrayOutputStream outStream = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = 0;while ((len = inStream.read(buffer)) != -1) {outStream.write(buffer, 0, len);}inStream.close();return outStream.toByteArray();}public static void main(String[] args) {// 图片url,压缩后的宽和高String url = "/upload/c671c57023e6eb83a1fa492babf0779e.jpg";int w = 700;int h = 500;//获取图片访问真实urlif(url.startsWith("/")){url = "http://localhost"+url;}String newDir = "/var/imgcompress/";String newName = MD5Util.encodeMD5(url);//从网络下载图片并保存到本地磁盘String srcPath = newDir + newName + url.substring(url.indexOf("."));writeImageToDisk(getImageFromNetByUrl(url),srcPath);//压缩后的图片路径String filePath = newDir + newName + "_" + w + "_" + h+ url.substring(url.indexOf("."));System.out.println(filePath);// 测试boolean test = zoomInImage(srcPath, filePath, w, h);if (test) {System.out.println("ok");}}}

转载于:https://my.oschina.net/JustLoveIT/blog/486247

图片压缩的另一种实现(3)相关推荐

  1. 把图片压缩成指定大小,释放你的内存空间

    不知道大家的设备是否也因为储存了太多图片导致内存爆满,时不时就会出现闪屏.卡顿的情况,十分影响我们的使用.有的小伙伴可能会将这些图片上传到云端,但有时会因为忘记了账号或是账号出现异常而丢失图片.其实, ...

  2. 图片怎么压缩图片大小_图片的体积怎么压缩?这三种方法你会吗?

    图片是我们在工作中经常要使用到的东西,在平时使用图片的时候相信大家都遇到过由于系统限制图片大小导致自己的图片无法上传的情况,这时候就需要对图片进行压缩了,把图片的体积降低到符合系统要求的大小,然后再进 ...

  3. 图片的体积怎么压缩?这三种方法你会吗?

    图片是我们在工作中经常要使用到的东西,在平时使用图片的时候相信大家都遇到过由于系统限制图片大小导致自己的图片无法上传的情况,这时候就需要对图片进行压缩了,把图片的体积降低到符合系统要求的大小,然后再进 ...

  4. android图片压缩的三种方式

    为了避免oom的出现,几乎每个应用都会对大图进行压缩,我现在手头做的产品就有很多地方用到,以前封装工具类的时候,都是在网上找东找西,然后拼拼凑凑,有效果就行了,一直用的迷迷糊糊,这几天工作比较闲,正好 ...

  5. Android 图片压缩最常用的几种方法

    在android开发中图片是非常容易造成OOM异常的,大部分情况下,都需要对图片进行压缩展示,本文主要是记录下在开发中常见的几种图片压缩方法 一.质量压缩 保持像素的前提下改变图片的位深及透明度(即: ...

  6. 图片压缩怎么做?这几种图片压缩方法很方便

    怎么把图片给压缩一下呢?图片的内存如果太大,那我们不管是在发送还是保存都会不方便.发送时会非常缓慢,保存时也占据很多内存,对本来空间就不太够的电脑或手机来说是一个致命问题.缓解这方面问题我们可以将图片 ...

  7. android-----解决Bitmap内存溢出的一种方法(图片压缩技术)

    我们在平常使用Bitmap的过程中经常会遇到OOM异常,为此困扰了我两三天时间,接下来把我自己的解决方法讲述一下: 首先来看看为什么使用Bitmap会导致OOM异常的,假如采用Bitmap来加载一个5 ...

  8. java 图片压缩100k_Java 实现图片压缩的两种方法

    问题背景. 典型的情景:Nemo社区中,用户上传的图片免不了要在某处给用户做展示. 如用户上传的头像,那么其他用户在浏览该用户信息的时候,就会需要回显头像信息了. 用户上传的原图可能由于清晰度较高而体 ...

  9. java 图片压缩100k_如何将图片压缩到100K以内,教你几种免费方法

    一般我们在提交电子证件照时都要求100K以内的图片,超过则无法正常上传,那么有没有免费将图片压缩变小的方法呢?教你3个简单又免费的方法,收藏起来备用吧. 方法1:最简单粗暴的方式就是直接打开图片后用聊 ...

最新文章

  1. ubuntu 14.0 下github 配置
  2. mysql用外键链接两个表_可能做一个MySQL外键的两个可能的表之一?
  3. 关于申请由中国自动化学会主办“全国大学生智能汽车竞赛”的回函
  4. 066_xhtml简介
  5. RuntimeError: Model class django.contrib.sites.models.Site doesn't declare an explicit app_label and
  6. python Json的一点收获,自定义序列化方法
  7. 算术(HDU-6715)
  8. 品质生活在于细节 8月6日张朝阳“做饭直播”带货厨房好物
  9. 【python】 类、对象的练习题
  10. 基于Springboot的理财系统
  11. 加载PageOffice控件失败。 当前浏览器是42版本以上的谷歌浏览器,建议采用POBrowser技术打开PageOffice即可。
  12. android 修复工具,牛学长安卓手机修复工具(Reiboot for Android)
  13. 当前版本与卡刷包android_安卓SuperSU卡刷包 V2.82 SR5 安卓版下载 - win10专业版官网 - win10系统之家...
  14. Android自定义方式设置drawableleft图片大小
  15. jQuery 遍历 - find() 方法
  16. STM32 Roadshow 更新 | 生态伙伴演讲定档
  17. 使用神经网络和遗传算法玩转 Flappy Bird
  18. 计算机基本键盘应用,计算机键盘基础知识
  19. Ubuntu下软件安装的方法(配图解)
  20. 频谱、频谱密度、功率谱密度、能量谱密度

热门文章

  1. practical of programming 第二章 java的quick sort
  2. War3窗口限定小工具发布
  3. SSAS的MDX语句整理
  4. ApiPost V5 升级指南
  5. delphi和python比较_Python For Delphi---更好地协同
  6. 数独游戏技巧从入门到精通_工程施工图识图方法和技巧,使你从建筑施工入门到精通!...
  7. Python 正则表达式(二)
  8. R语言编程基础(1)
  9. 前端开发必看 | Vue在前端市场这么火,它到底是什么?
  10. 专科计算机组成原理大一试题及答案,计算机组成原理专科试题答案.doc