方式一:使用Image.getScaledInstance

使用jdk的awt包下的Image.getScaledInstance实现图片的缩放。好处是无需引入第三方jar,缺点是会稍微有点模糊。

工具类ImageUtils:

package utils;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;public class ImageUtils {/*** 通过BufferedImage图片流调整图片大小*/public static BufferedImage resizeImage(BufferedImage originalImage, int targetWidth, int targetHeight) throws IOException {Image resultingImage = originalImage.getScaledInstance(targetWidth, targetHeight, Image.SCALE_AREA_AVERAGING);BufferedImage outputImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB);outputImage.getGraphics().drawImage(resultingImage, 0, 0, null);return outputImage;}/*** BufferedImage图片流转byte[]数组*/public static byte[] imageToBytes(BufferedImage bImage) {ByteArrayOutputStream out = new ByteArrayOutputStream();try {ImageIO.write(bImage, "jpg", out);} catch (IOException e) {e.printStackTrace();}return out.toByteArray();}/*** byte[]数组转BufferedImage图片流*/private static BufferedImage bytesToBufferedImage(byte[] ImageByte) {ByteArrayInputStream in = new ByteArrayInputStream(ImageByte);BufferedImage image = null;try {image = ImageIO.read(in);} catch (IOException e) {e.printStackTrace();}return image;}
}

测试:

1.通过 url 获取图片并调整大小后保存:

import utils.ImageUtils;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;public class Test {public static void main(String[] args) {try {//通过url获取BufferedImage图像缓冲区URL img = new URL("https://img1.360buyimg.com/image/jfs/t1/38591/20/3737/314695/5cc69c01E1838df09/dd6dce681bd23031.jpg");BufferedImage image = ImageIO.read(img);//获取图片的宽、高System.out.println("Width: " + image.getWidth());System.out.println("Height: " + image.getHeight());//调整图片大小为 400X400尺寸BufferedImage newImage = ImageUtils.resizeImage(image,400,400);//将缓冲区图片保存到 F:/test/pic1.jpg (文件不存在会自动创建文件保存,文件存在会覆盖原文件保存)ImageIO.write(newImage, "jpg", new File("F:/test/pic1.jpg"));} catch (IOException e) {e.printStackTrace();}}
}

2、通过读取图片文件调整大小再保存:

import utils.ImageUtils;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;public class Test {public static void main(String[] args) {try {//读取原始图片BufferedImage image = ImageIO.read(new FileInputStream("F:/test/pic1.jpg"));System.out.println("Width: " + image.getWidth());System.out.println("Height: " + image.getHeight());//调整图片大小BufferedImage newImage = ImageUtils.resizeImage(image,200,200);//图像缓冲区图片保存为图片文件(文件不存在会自动创建文件保存,文件存在会覆盖原文件保存)ImageIO.write(newImage, "jpg", new File("F:/test/pic2.jpg"));} catch (IOException e) {e.printStackTrace();}}
}

3、MultipartFile类型的图片文件调整大小再保存:

 public JSONObject imageSizeAdjustment(MultipartFile file) {JSONObject result = new JSONObject();try {//从MultipartFile 中获取 byte[]byte[] bytes = file.getBytes();//byte[]转 InputStream InputStream in = new ByteArrayInputStream(bytes);//读取图片输入流为 BufferedImage BufferedImage image = ImageIO.read(in);System.out.println("Width: " + image.getWidth());System.out.println("Height: " + image.getHeight());//调整图片大小BufferedImage newImage = ImageUtils.resizeImage(image, 200, 200);//图像缓冲区图片保存为图片文件(文件不存在会自动创建文件保存,文件存在会覆盖原文件保存)ImageIO.write(newImage, "jpg", new File("F:/test/pic2.jpg"));} catch (IOException e) {e.printStackTrace();}result.put("code", 1);result.put("note", "成功");return result;}

方式二:使用Thumbnailator

Thumbnailator是Java的开源图像大小调整库,它使用渐进式双线性缩放。它支持JPG,BMP,JPEG,WBMP,PNG和GIF。

通过将以下Maven依赖项添加到我们的pom.xml中,将其包括在我们的项目中:

<dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.11</version>
</dependency>

工具类ThumbnailsUtils:

import net.coobird.thumbnailator.Thumbnails;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;public class ThumbnailsUtils{private static final Logger logger = LoggerFactory.getLogger(ThumbnailsUtils.class);/*** 通过BufferedImage图片流调整图片大小*/public static BufferedImage resizeImageOne(BufferedImage originalImage, int targetWidth, int targetHeight) throws Exception {ByteArrayOutputStream outputStream = new ByteArrayOutputStream();Thumbnails.of(originalImage).size(targetWidth, targetHeight).outputFormat("JPEG").outputQuality(1).toOutputStream(outputStream);byte[] data = outputStream.toByteArray();ByteArrayInputStream inputStream = new ByteArrayInputStream(data);return ImageIO.read(inputStream);}/*** BufferedImage图片流转byte[]数组*/public static byte[] imageToBytes(BufferedImage bImage) {ByteArrayOutputStream out = new ByteArrayOutputStream();try {ImageIO.write(bImage, "jpg", out);} catch (IOException e) {logger.error("错误信息: ", e);}return out.toByteArray();}/*** byte[]数组转BufferedImage图片流*/private static BufferedImage bytesToBufferedImage(byte[] ImageByte) {ByteArrayInputStream in = new ByteArrayInputStream(ImageByte);BufferedImage image = null;try {image = ImageIO.read(in);} catch (IOException e) {logger.error("错误信息: ", e);}return image;}
}

测试:

和上面测试基本一样只不过 ImageUtils.resizeImage换成 ThumbnailsUtils.resizeImageOne即可。

  • 不修改尺寸直接将Url图片下载并转化为File

/***  将Url转换为File* @param url 图片在线链接* @param pathUrl 下载到本地路径* @return* @throws Exception*/
public static File urltoFile(String url,String pathUrl) throws Exception {HttpURLConnection httpUrl = (HttpURLConnection) new URL(url).openConnection();httpUrl.connect();InputStream ins=httpUrl.getInputStream();// 获取文件后缀String prefix = url.substring(url.lastIndexOf("."));String fileUrl = pathUrl + UUIDUtil.get32UUID()+prefix;File file = new File(fileUrl);//System.getProperty("java.io.tmpdir")缓存if (file.exists()) {file.delete();//如果缓存中存在该文件就删除}OutputStream os = new FileOutputStream(file);int bytesRead;int len = 8192;byte[] buffer = new byte[len];while ((bytesRead = ins.read(buffer, 0, len)) != -1) {os.write(buffer, 0, bytesRead);}os.close();ins.close();return file;
}

Java修改图片大小尺寸图片缩放(URL图片和本地图片)相关推荐

  1. php图片大小怎么改,如何批量修改图片大小/尺寸

    小编给大伙分享一个小巧实用的批量修改图片大小工具,可以批量修改图片大小尺寸,限制缩放后的图片文件大小,以满足在线照片打印的要求,或便于上传图片到网店商铺以方便您的照片展示.很是实用! 操作灰常简单的哟 ...

  2. 怎么用电脑修改图片尺寸?图片大小尺寸修改教程

    在平时生活中,随着现在的数码设备发展,拍摄的照片越来越清楚,像素越来越高,但是像素高的照片体积也就越大,在网上使用这些照片素材或者发送某些高清图片文件的时候都会遇到图片过大无法使用的情况,有的会注明要 ...

  3. 修改图片大小尺寸如何操作?修改图片大小尺寸的作用

    图片在不同场合下需要具备适当的尺寸和分辨率,如果不满足要求,就会影响到其质量和效果.因此,修改图片大小尺寸是一种常见的处理方法,可以让图片更好地适应不同的需求和场景. 修改图片的大小和尺寸可以带来以下 ...

  4. 批量处理图形大小如何更改图片大小尺寸修改图片视频教程ps学习ps教程ps基础新教程

    批量处理图形大小如何更改图片大小尺寸修改图片视频教程ps学习ps教程ps基础新教程

  5. 怎样修改图片大小尺寸?如何快速图片改大小?

    ​有时候因为图片尺寸太大会影响我们使用,怎样修改图片大小尺寸?今天就教给大家使用压缩图的图片改大小功能来修改图片尺寸大小,在线操作起来也十分方便,一起来看看吧. ​ 1.选择图片改大小功能. 2.上传 ...

  6. 赛效:如何修剪图片大小尺寸 教你在线轻松剪裁照片

    在日常生活中,我们经常需要对图片进行大小尺寸的修剪,以使它们更适合于不同的场景或用途.但是,许多人并不知道如何修剪图片大小尺寸,或者不知道如何使用在线工具来轻松剪裁照片.下面,我们就来介绍一下. Ti ...

  7. 如何裁剪图片大小尺寸?

    如何裁剪图片大小尺寸?平时我们在工作或者学习的时候,会经常需要将图片上传到不同的网站或者平台上,然而上传的时候经常会受到尺寸的限制,有时候尺寸太大就需要变小,为了确保上传成功,我们需要将图片进行裁剪, ...

  8. 【转】c# 图片压缩 (非图片大小变化)----使得显示效果差点,但是图片占用空间需要变小

    转自:http://bbs.csdn.net/topics/270043488 c# 图片压缩 (非图片大小变化)----使得显示效果差点,但是图片占用空间需要变小. [问题点数:60分,结帖人lin ...

  9. ps如何修改图片大小尺寸_如何查看图片尺寸,大小及如何修改图片尺寸—淘宝美工入门课03...

    上一篇文章给大家分享了一下豆芽常用字体,也提供了下载链接,今天和大家聊聊有关图片尺寸和图片大小相关的问题,主要包含以下这3个方面. 一,如何查看图片的尺寸(像素px) 二,如何改变图片的尺寸 三,了解 ...

最新文章

  1. UIScrollView用法
  2. 【作死】更新macOS Mojave后Vagrant无法使用
  3. 大话设计模式(五 体会简单工厂模式的美妙)
  4. Girton conservations
  5. css_position
  6. 2018批量打印开关_从阿迪达斯到国产品牌,感受3D打印技术掀起的运动鞋中底革命...
  7. python 浮点数比较_Python中的浮点数
  8. python中间件有哪些_python_21(Django中间件)
  9. oracle中打钩,wps文档如何在小方块里打钩?
  10. 计算机办公小知识,工作常用电脑知识技巧大全
  11. 130 个相见恨晚的超实用网站,一次性分享出来。
  12. 或取代当前非易失性内存技术 Crossbar正式进军中国存储市场
  13. [Excel VBA]如何批量產出QRcode?
  14. VMVare中Ubuntu报错:Drag and drop is not supported
  15. 微信网页授权问题记录
  16. Linux下vim的复制、粘贴操作
  17. 42步进电机与57步进电机
  18. 适用于WordPress的16个最佳Gutenberg块插件(超级有用)
  19. storm 实战及实例讲解(二)
  20. 苹果电脑各型号支持的macOS版本

热门文章

  1. C++ 构造函数、复制构造函数,拷贝构造函数(深拷贝、浅拷贝)
  2. [antdv: DatePicker] `value` provides invalidate moment time. If you want to set empty value, use `nu
  3. mysql挪光标只能用键盘,Windows8/8.1下,键盘按键后,鼠标左键短暂失灵问题_MySQL...
  4. docker rabbitmq 安装 延迟队列 rabbitmq_delayed_message_exchange 插件
  5. 【社招面试】虎扑旗下毒app面试
  6. 从通讯录中导入联系人并去重
  7. 数据分析中常用到EXCEL快捷键合集
  8. 【PS基础】彩色半调字体
  9. 【Rust日报】2022-03-22 fluent-uri:一个快速、简单和严格的URI解析器
  10. 如何使用Ultra Stream录制PS4 Pro游戏视频