【代码片段分享】FTP通过Properties读取配置文件配置参数

【代码片段分享】FTP上传下载文件创建文件读写目录创建_无极低码的博客-CSDN博客爬虫:Java接口爬取GZIPInputStream格式内容解析_无极低码的博客-CSDN博客【代码片段分享】FTP上传下载文件创建文件读写目录创建_无极低码的博客-CSDN博客

使用场景:

一般在真实项目中我们为了节省服务器资源会对上传的图片进行限制,这种限制在前端可以进行大小限制,在后端也可以进行限制,同时我们可以在后端进行图片的裁剪和压缩,今天我们分享的代码片段主要为图片后端压缩的工具代码:

代码片段:

package com.wwp.utils;import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.MathContext;
import java.util.ArrayList;import javax.imageio.ImageIO;public class ImgScal {/*** * 按指定的比例缩放图片 * * @param sourceImagePath *      源地址 * @param destinationPath *      改变大小后图片的地址 * @param scale *      缩放比例,如1.2 */public static void scaleImage(String sourceImagePath, String destinationPath, double scale,String format) { File file = new File(sourceImagePath); BufferedImage bufferedImage; try { bufferedImage = ImageIO.read(file); int width = bufferedImage.getWidth(); int height = bufferedImage.getHeight(); width = parseDoubleToInt(width * scale); height = parseDoubleToInt(height * scale); Image image = bufferedImage.getScaledInstance(width, height, Image.SCALE_SMOOTH); BufferedImage outputImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics graphics = outputImage.getGraphics(); graphics.drawImage(image, 0, 0, null); graphics.dispose(); ImageIO.write(outputImage, format, new File(destinationPath)); } catch (IOException e) { System.out.println("scaleImage方法压缩图片时出错了"); e.printStackTrace(); } } /*** * 将图片缩放到指定的高度或者宽度 * @param sourceImagePath 图片源地址 * @param destinationPath 压缩完图片的地址 * @param width 缩放后的宽度 * @param height 缩放后的高度 * @param auto 是否自动保持图片的原高宽比例 * @param format 图图片格式 例如 jpg * image.SCALE_SMOOTH //平滑优先image.SCALE_FAST//速度优先image.SCALE_AREA_AVERAGING //区域均值image.SCALE_REPLICATE //像素复制型缩放image.SCALE_DEFAULT //默认缩放模式*/public static boolean scaleImageWithParams(String sourceImagePath, String destinationPath, int width, int height, boolean auto,String format) { File file =null;try { file = new File(sourceImagePath); BufferedImage bufferedImage = null; bufferedImage = ImageIO.read(file); if (auto) { ArrayList<Integer> paramsArrayList = getAutoWidthAndHeight(bufferedImage,width,height); width = paramsArrayList.get(0); height = paramsArrayList.get(1); System.out.println("自动调整比例,width="+width+" height="+height); } Image image = bufferedImage.getScaledInstance(width, height, Image.SCALE_REPLICATE); BufferedImage outputImage = new BufferedImage(width, height, BufferedImage.SCALE_REPLICATE); Graphics graphics = outputImage.getGraphics(); graphics.drawImage(image, 0, 0, null); graphics.dispose(); ImageIO.write(outputImage, format, new File(destinationPath)); } catch (Exception e) { System.out.println("scaleImageWithParams方法压缩图片时出错了"); e.printStackTrace(); return false; }finally {if (file!=null&&file.exists()) {file.delete();}}return true; } /** * 将double类型的数据转换为int,四舍五入原则 * * @param sourceDouble * @return */private static int parseDoubleToInt(double sourceDouble) { int result = 0; result = (int) sourceDouble; return result; } /*** * * @param bufferedImage 要缩放的图片对象 * @param width_scale 要缩放到的宽度 * @param height_scale 要缩放到的高度 * @return 一个集合,第一个元素为宽度,第二个元素为高度 */private static ArrayList<Integer> getAutoWidthAndHeight(BufferedImage bufferedImage,int width_scale,int height_scale){ ArrayList<Integer> arrayList = new ArrayList<Integer>(); int width = bufferedImage.getWidth(); int height = bufferedImage.getHeight(); double scale_w =getDot2Decimal( width_scale,width); System.out.println("getAutoWidthAndHeight width="+width + "scale_w="+scale_w); double scale_h = getDot2Decimal(height_scale,height); if (scale_w<scale_h) { arrayList.add(parseDoubleToInt(scale_w*width)); arrayList.add(parseDoubleToInt(scale_w*height)); } else { arrayList.add(parseDoubleToInt(scale_h*width)); arrayList.add(parseDoubleToInt(scale_h*height)); } return arrayList; } /*** * 返回两个数a/b的小数点后三位的表示 * @param a * @param b * @return */public static double getDot2Decimal(int a,int b){ BigDecimal bigDecimal_1 = new BigDecimal(a); BigDecimal bigDecimal_2 = new BigDecimal(b); BigDecimal bigDecimal_result = bigDecimal_1.divide(bigDecimal_2,new MathContext(4)); Double double1 = new Double(bigDecimal_result.toString()); System.out.println("相除后的double为:"+double1); return double1; } }

【代码片段分享】Java实现上传图片压缩缩略图相关推荐

  1. 超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享...

    超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享 DI框架 Google-Guice入门介绍 转载于:https://www.cnblogs.com ...

  2. java程序实现wifi连接打印_Android下通过wifi调用打印机打印,Java代码片段分享,

    Android下通过wifi调用打印机打印 chongq 分享于 2小时前 4972阅 0人收藏此代码, 好图网图标搜索引擎,提供超过60万的免费图标.PNG图标.ICO图标.ICNS图标.网页图标 ...

  3. mysql和redis统计网站活跃度,最代码网站用户私信列表采用mysql union查询优化为Redis查询的经验和相关代码片段分享...

    由于用户和私信的数据量逐渐增加,查询用户和其他用户的私信合并排重排序的sql语法给mysql带来了很大的压力,springdata jpa的hql查询语法如下:select id from (sele ...

  4. 100个常用的 JS 代码片段分享,值得你收藏

    实现字符串长度截 function cutstr(str, len) {         var temp;         var icount = 0;         var patrn = / ...

  5. java socket分包粘包 代码_分享java中处理socket通信过程中粘包情况的实例代码

    本篇文章主要介绍了java中处理socket通信过程中粘包的情况,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 这两天学习了java中处理socket通信过程中粘包的情况,而且很重要,所以,今天添 ...

  6. 1 5 php,直接可以拿来用的PHP惯用功能代码片段(1~5)

    文章来源:jquery教程 - http://www.jq-school.com/Show.aspx?id=322 前面已经分享了100个常用的原生JavaScript代码片段,现在有空就开始收集PH ...

  7. massCode 一款优秀的开源代码片段管理器

    目录 massCode 特点 多语言支持 多层级文件夹管理 ACE 高性能编辑器 HTML & CSS 实时渲染 Markdown 编辑和预览 快速检索 自动保存 实时同步 数据库 插件集成 ...

  8. java 代码压缩javascript_通过Java压缩JavaScript代码实例分享

    通过移除空行和注释来压缩 javascript 代码 /** * this file is part of the echo web application framework (hereinafte ...

  9. 分享.NET开发中经常使用到的代码片段 完全从实际项目中提取出来,也可被反反复复的重复借用...

    几年前,一篇<ASP.NET开发人员经常使用的三十三种代码>非常流行,它总结了一些经常在ASP.NET开发中使用到的代码,直接可以拿来使用.今天重读这篇文章,有感而发,善于总结也是进步,于 ...

最新文章

  1. 消灭Bug!推荐7款优秀的开源Bug跟踪工具
  2. eclipse 如何使用svn
  3. 设计模式--建造者模式--简记
  4. nginx 和 uWISG 服务器之间如何配合工作的
  5. mysql 逻辑备份 物理备份_数据库的逻辑备份和物理备份--非RMAN
  6. python的gui编程pyqt5_Python-GUI编程-PyQt5
  7. 西部数码 php.ini,如何修改PHP的memory_limit限制
  8. adb shell top 使用
  9. 学习——AQS工作原理分析
  10. ⒔Bash 内部命令
  11. 高通QFIL烧录错误解决方法
  12. 如何用ps制作GIF动图
  13. 乒乓球:浅析业余高手从输球中总结的10条心得!
  14. linux每日命令(3):ln命令
  15. 中国电信计算机类校园招聘笔试题目,中国电信集团2019校园招聘笔试真题(计算机技术类-A卷)(精选).doc...
  16. IDEA中修改Maven的项目名称
  17. android11 动态设置屏幕旋转方向
  18. 网络编程 3 tcp通信
  19. android 转码工具下载,m3u8视频转码工具
  20. 美式期权定价利率衍生证券

热门文章

  1. Java 开源开发平台 O2OA V7.3 发布,新增带权限的全文检索等重要功能
  2. 向日葵远程连接时控制失灵
  3. (理财八)普通必须掌握的理财方式----定投
  4. mac下如何安装mysql以及忘记密码如何重置密码
  5. Java基础之Java8 新特性
  6. 【鲲鹏HCIA考试】随堂习题卷一
  7. selenium 无头模式
  8. 基于live555的rtsp播放器之十八:G711a/G711u/G726转AAC
  9. 未曾清贫难成人,不经打击老天真,从来英雄出炼狱,自古富贵入凡尘,醉生梦死谁成器,拓马长枪定乾坤
  10. Houdini一键修改Alembic相机分辨率。