java图片压缩

1、首先从Fast服务器获取图片流,然后将流转化成BufferedImage

2、从BufferedImage根据需要的宽度和高度获取压缩图片实例

3、对压缩图片实例进行重绘,将图片绘制到BufferedImage

4、使用ImageIO对BufferedImage进行流读写的操作,输出到本地磁盘系统或上传到fast服务器

public class FileUtilsFastDfsAdapter{
    @Resource
    private FastDfsUtils fastDfsUtils;

    @Value("${fastdfs.fileServer}")
    private String fastUrl;

/**
*按照指定宽度进行压缩
*
*/
public String getScaleImage(String url, Integer width, Integer height) throws IOException, MyException { byte[] fileByte = fastDfsUtils.getFileByte(url); BufferedImageVo bufferedImageVo = getBufferedImage(fileByte); BufferedImage bufferedImage = bufferedImageVo.getBufferedImage(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); String jpgId = getUrl(bufferedImageVo, bufferedImage, (int) height, (int) width); return jpgId; } private BufferedImageVo getBufferedImage(byte[] fileByte) throws IOException { BufferedImageVo bufferedImageVo = new BufferedImageVo(); // 将字节数组转为InputStream,再转为MemoryCacheImageInputStream ImageInputStream imageInputstream = new MemoryCacheImageInputStream(new ByteArrayInputStream(fileByte)); // 获取所有能识别数据流格式的ImageReader对象 Iterator<ImageReader> it = ImageIO.getImageReaders(imageInputstream); BufferedImage bufferedImage= null; int originalWidth = 0,originalHeight = 0; // 迭代器遍历尝试用ImageReader对象进行解码 while (it.hasNext()) { ImageReader imageReader = it.next(); // 设置解码器的输入流 imageReader.setInput(imageInputstream, true, true); // 图像文件格式后缀 String suffix = imageReader.getFormatName().trim().toLowerCase(); // 图像宽度 originalWidth = imageReader.getWidth(0); // 图像高度 originalHeight = imageReader.getHeight(0); System.out.printf("format %s,%dx%d\n", suffix, originalWidth, originalHeight); try { // 解码成功返回BufferedImage对象 // 0即为对第0张图像解码(gif格式会有多张图像),前面获取宽度高度的方法中的参数0也是同样的意思 bufferedImage = imageReader.read(0, imageReader.getDefaultReadParam()); } catch (Exception e) { imageReader.dispose(); // 如果解码失败尝试用下一个ImageReader解码 } bufferedImageVo.setSuffix(suffix); } bufferedImageVo.setBufferedImage(bufferedImage); return bufferedImageVo; }
/**
*根据提供的最大边进行等比例压缩
*
*/
public String getScaleImage(String url, Integer maxLength) throws IOException, MyException { byte[] fileByte = fastDfsUtils.getFileByte(url); BufferedImageVo bufferedImageVo = getBufferedImage(fileByte); BufferedImage bufferedImage = bufferedImageVo.getBufferedImage(); // 图像宽度 int originalWidth = bufferedImage.getWidth(); // 图像高度 int originalHeight = bufferedImage.getHeight(); //按压缩压缩比例获取宽度和高度 Float bl; if(originalHeight>originalWidth){ bl = maxLength/Convert.toFloat(originalHeight); }else{ bl = maxLength/Convert.toFloat(originalWidth); } float height = originalHeight * bl; float width = originalWidth * bl; String jpgId = getUrl(bufferedImageVo, bufferedImage, (int) height, (int) width); return jpgId; } /** * 对图像进行压缩并上传到fast * @param bufferedImageVo 提供图片后缀 * @param bufferedImage 原图片buffered,提供压缩模板 * @param height 压缩后的高度 * @param width 压缩后的宽度 * @return * @throws IOException * @throws MyException */ private String getUrl(BufferedImageVo bufferedImageVo, BufferedImage bufferedImage, int height, int width) throws IOException, MyException { ByteArrayOutputStream bos = new ByteArrayOutputStream();
     //获取压缩图片实例 Image scaledInstance
= bufferedImage.getScaledInstance(width, height, Image.SCALE_SMOOTH); BufferedImage outImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics graphics = outImage.getGraphics();
     //进行重绘 graphics.drawImage(scaledInstance,
0,0,null); graphics.dispose(); bufferedImage.getType(); ImageIO.write(outImage,bufferedImageVo.getSuffix(),bos); outImage.flush(); return fastDfsUtils.upload(bos.toByteArray(), bufferedImageVo.getSuffix()); } }

 

转载于:https://www.cnblogs.com/nangonghui/p/11341606.html

Java压缩图片:按比例压缩图片 本文介绍了使用Java实现图片压缩功能的方法。主要内容包括:1)引入Spring Web、文件上传等必要依赖;2)创建ImgTools工具类,提供图片压缩、格式转换等功能,支持按比例缩放;3)定义OPERATION_TYPE枚举类设置不同压缩模式参数;4)实现示例代码,演示如何读取图片文件、进行压缩处理并保存结果。该方法可有效减小图片文件大小,支持PNG/JPG格式,提供了THUMB、ZOOM等多种压缩模式选择。 阅读详情

相关推荐

Java图片压缩 - 压缩到指定大小范围

Java图片递归压缩到指定范围

甘蓝的专栏 7934

FastDFS合并存储以及图片压缩配置

一、合并存储配置 FastDFS提供了合并存储功能的实现,所有的配置都在tracker.conf文件之中 开启合并存储只需要设置use_trunk_file = true和store_server=1 trunk文件 storage服务器磁盘上存储的合并后的实际文件,默认大小为64MB。Trunk文件文件名格式:fdfs_storage1/data/00/00/000001 文件名从1开始...

kevin 5493

FastDFS整合Nginx+lua实现图片压缩所需依赖包

nginx-1.17.5 ngx_devel_kit lua-nginx-module-0.10.9rc7 fastdfs-nginx-module LuaJIT-2.0.4 ua-5.3.1 GraphicsMagick-1.3.18

实战:轻量级分布式文件系统FastDFS(GraphicsMagick图片压缩)

轻量级分布式文件系统FastDFS——实现用户头像上传/压缩屏幕适配 一、需求分析 1.1 业务场景: 用户上传的头像图片大小不一、手机和PC等设备显示尺寸也存在差异,因此需要能根据http请求指定的尺寸参数对图片进行动态压缩,以达到屏幕适配的作用。 1.2 功能需求: 搭建FastDFS图片服务器,通过http请求访问服务器中图片时,显示动态缩略图。 具体要求如下: 1.在Linux系统中安装FastDFS服务器 2.可以使用FastDFS自带的工具将文件上传到FastDFS 3.通过http访问某个

chuanchengdabing的博客 1315

Fastdfs与nginx进行压缩图片比率

在此先把前面自己做的那个功能在此分享下,是一个模仿淘宝的,希望大神们有什么想法可以不吝赐教: 自己是通过前面的参考配置lua与nginx的结合使用,利用脚本语言lua的强大特性和nginx的特性来实现这个功能,在nginx.conf的配置文件中加入如下代码: server { listen 22222; server_name localhost; # server_name somename alias another.alias; location /images/{ alias /root/images; set $image_root /root; se

S32DS 3.5.8离线包怎么用?保姆级教程教你手动安装S32K3开发环境(附资源下载)

本文详细介绍了S32DS 3.5.8离线包的安装方法,适用于S32K3开发环境的手动搭建。从资源获取、完整性验证到分步安装指南,提供了全面的离线部署解决方案,特别适合军工/车企内网开发等场景。文章还包含版本选择建议、常见问题排查及团队协作方案,帮助开发者高效完成环境配置。

weixin_30471561的博客 477

压缩图片并上传FastDFS

谷歌提供压缩图片以依赖: <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency> ...

xiaoguaihu12的博客 962

docker 安装oracle

本文介绍了使用Docker部署Oracle数据库的实践指南。主要内容包括:常用Oracle镜像的阿里云和华为云拉取地址,11g/12c/19c等不同版本的启动命令示例,以及连接数据库的基本信息。实战部分详细演示了Oracle 11g的安装过程,包括镜像拉取、容器启动、密码修改和数据库连接步骤,并通过Sql Developer和命令行两种方式创建用户。最后提到数据持久化的重要性,建议将数据库文件挂载到宿主机目录以防止容器删除导致数据丢失。文章提供了完整的操作命令和截图说明,适合需要快速部署Oracle测试环境

weixin_39766667的博客 373

java中图片压缩

图片常用格式如JPEG、PNG、GIF,如果在数据库存储或者使用oss对象存储,内存有限或者不希望存储图片对查询新能有很大影响并且对图片显示不是追求原始图片,那么就可以使用将比如png这种难以压缩的图片格式转换未JPEG图片格式,这样就可以达到压缩图片大小,

weixin_74785181的博客 1874

基于TDOA的chan算法(定位算法)

Chan算法原理 TDOA(TDOA,the time differences of arrival,到达时间差),Chan算法是TDOA定位方法的一个很好用的方法。 Chan算法是非递归双曲线方程组解法,具有解析表达式解,主要特点是:在测量误差服从理想高斯分布时,它的定位精度高、计算量小,并且可以通过增加已确定点的数量来提高算法精度。 该算法的推导前提是基于测量误差为零均值高斯随机变量,对于实际环境中误差较大的测量值,比如在有非视距误差的环境下,该算法的性能会有显著下降。二维情况下,可分为只有三个点参与定

优快云不再更新 2万+

Python Pygame 游戏开发中的状态机设计

在游戏开发中,一个游戏往往包含多个不同的场景和状态,例如主菜单、游戏关卡、暂停界面、游戏结束界面等。状态机设计的目的就是为了有效地管理这些不同的状态,使得游戏的逻辑更加清晰、易于维护和扩展。本文的范围主要聚焦于如何在 Python Pygame 这个游戏开发库中实现和应用状态机设计,涵盖了从基本概念到实际项目应用的各个方面。本文将按照以下结构进行组织:首先介绍状态机的核心概念和联系,包括其原理和架构;接着详细讲解核心算法原理和具体操作步骤,并通过 Python 代码进行说明;

AI Python 编程之道的博客 1236

Java上传OSS图片,对图片进行压缩。

这里就不讲如何实现如上传的功能,只针对做图片的压缩。先看效果。 针对上传的功能请看前一篇文章  https://blog.youkuaiyun.com/u014373554/article/details/83650304 759KB  被压成 2KB多一点,实现等比例压缩。 压缩前的图片 压缩后的图片。 前面介绍的那么多,有两种压缩方式,先介绍第一种压缩方式,压缩比较厉害的方式, 复...

追风筝的人博客 8966

晟矽微MC32F7361定时器的使用案例说明

110所以TIMER0所用的频率是FCPU的1/64,也就是8/64MHZ. 为1/8MHZ。//io口下拉电阻 1:enable 0:disablea。//io口上拉电阻 1:enable 0:disable。//io口下拉电阻 1:enable 0:disable。//io口上拉电阻 1:enable 0:disable。//io口下拉电阻 1:enable 0:disable。//io口上拉电阻 1:enable 0:disable。

liyanfei123456的博客 1129

java 对图片进行压缩

图片压缩大法 为了防止用户流量的丢失,即使在5g 即将来临的情况下,压缩算法依旧是很有必要的,额跑题了,不好意思,今天介绍的不是压缩算法,讲啥呢?主要讲讲如何通过 java 将图片进行压缩,尽可能的控制压缩损比,不仅仅是为了减少存储,其目的是快速呈现给用户,只有良好的体验,才会在当今这个急躁的年代减少流量的损失。 开始 java 代码表演,直接给代码吧 import com.su...

万物皆导 3万+

杂记 | 使用keycloak实现SSO单点登录(新手向,概念、原理、逻辑、详细步骤、难点解释)

使用keycloak实现SSO单点登录(概念、原理、逻辑、详细步骤、难点解释)

野生猿林仔的博客 2万+

YOLOv10改进策略【注意力机制篇】| 2024 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度

本文记录的是基于蒙特卡罗注意力(MCAttn)模块的YOLOv10目标检测改进方法研究。利用提高的跨尺度特征提取能力,使模型能够更好地传递和融合提取的多尺度特征,提高对小目标的关注度。Exploiting Scale-Variant Attention for Segmenting Small Medical Objects使用一种基于随机采样的池化操作来生成尺度无关的注意力图。它从三个不同尺度(3×33×33×3、2×22×22×2和1×11×11×1,即池化张量)中随机选择一个1×11×11×1注意力图

Limiiiing的博客 2186

java高清无损图片压缩

Java高清无损图片压缩 (本文禁止转载,如需转载请联系本人:微信/QQ同号:969987665)简单介绍thumbnailator-0.4.5.jar 官方下载网址语法使用(超级简单的,再也没有比这个再简单的东西)一、保持和原图像一样的宽高比二、生成一个带有旋转和水印的缩略图三、可以根据现有的图片生成高质量的缩略图参考:https://www.jianshu.com/p/fe6db...

weixin_41238001的博客 10万+

GEE:本地影像上传到GEE的Assets中,并输入机器学习算法中作为特征变量

当我们在 Google Earth Engine(GEE)中应用机器学习算法时,会输入一些影像作为特征变量数据,进一步根据这些特征影像去推理未知区域的数据。但是 GEE 平台上计算特征变量的 API 函数并不是非常全面,我们希望获得更多的特征用于分类。这个时候,我们可以将本地计算的特征影像上传到 GEE 中进行后续处理。本文记录了从本地上传特征数据到 GEE 的 Assets 中的教程,用于后续在 GEE 中分类或者回归使用。本文也可作为《》一文的补充。

养乐多的博客 1730

java实现图片压缩

图片压缩通常涉及减少图片的尺寸(缩放)、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等。

小hui的博客 3542

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java图片压缩大小,图片缩放

添加依赖 <!-- 图片缩略图 --> <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> ...

程序工厂 1896

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java 图片压缩100k_Java 图片压缩至指定大小

前言由于公司业务需求, 需要解决图片过大加载过慢的问题。这个问题呢首先给大家描述一下,起初是上传图片时将图片转换为base64保存至数据库存储的。 然后获取的时候会直接取出来base64转换图片展示,这样就发现上传的图片如果过大, 公司网络加载是会很慢的。 所以想到一个办法就是 上传时将图片压缩, 压缩后的和压缩之前的都保存下来。 然后默认展示压缩后的图片,然后点击图片时再去查出来原始图片的bas...

weixin_33343700的博客 2016

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

java压缩图片大小_java压缩图片、等比例压缩图片

java提供了图片处理支持,而且使用很简单,功能也比较强大(如支持设置压缩后图片质量),直接看代码即可。import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGEncodeParam;import com.sun.image.codec.jpeg.JPEGImageEncoder;import ja...

weixin_35654499的博客 1312

使用Java实现图片大小压缩

文章介绍了如何使用Java实现图片大小压缩,包括从输入流读取图片、压缩图片并通过输出流返回压缩后的图片数据。我们利用Thumbnailator库进行压缩,并创建了一个Spring Boot控制器来提供RESTful接口。

shyの个人笔记 6117

Java图片高优化压缩

Java进行图片压缩,能够等比压缩和同等图片大小压缩 现在我要去项目合并使用了,自己看源代码吧 private File file = null; // 文件对象 private String inputDir; // 输入图路径 private String outputDir; // 输出图路径 private String inputFileName; /

一路走下来 4770

Java实现图片压缩

通过Thumbnails压缩图片

走马川行雪的博客 6240
上一篇: 学习VUE笔记及遇到的坑(二)
下一篇: 浅谈分布式事务
aa_0320
博客等级 码龄11年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值