亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java修改圖片大小尺寸的簡(jiǎn)單實(shí)現(xiàn)

 更新時(shí)間:2021年09月17日 09:58:02   作者:西涼的悲傷  
這篇文章主要介紹了Java修改圖片大小尺寸的簡(jiǎn)單實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

方式一:使用Image.getScaledInstance

使用jdk的awt包下的Image.getScaledInstance實(shí)現(xiàn)圖片的縮放。好處是無(wú)需引入第三方j(luò)ar,缺點(diǎn)是會(huì)稍微有點(diǎn)模糊。

工具類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 {
    /**
     * 通過(guò)BufferedImage圖片流調(diào)整圖片大小
     */
    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圖片流轉(zhuǎn)byte[]數(shù)組
     */
    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[]數(shù)組轉(zhuǎn)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;
    }
}

測(cè)試

1.通過(guò) url 獲取圖片并調(diào)整大小后保存:

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 {
            //通過(guò)url獲取BufferedImage圖像緩沖區(qū)
            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());
            //調(diào)整圖片大小為 400X400尺寸
            BufferedImage newImage = ImageUtils.resizeImage(image,400,400);
            //將緩沖區(qū)圖片保存到 F:/test/pic1.jpg (文件不存在會(huì)自動(dòng)創(chuàng)建文件保存,文件存在會(huì)覆蓋原文件保存)
            ImageIO.write(newImage, "jpg", new File("F:/test/pic1.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2.通過(guò)讀取圖片文件調(diào)整大小再保存:

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());
            //調(diào)整圖片大小
            BufferedImage newImage = ImageUtils.resizeImage(image,200,200);
            //圖像緩沖區(qū)圖片保存為圖片文件(文件不存在會(huì)自動(dòng)創(chuàng)建文件保存,文件存在會(huì)覆蓋原文件保存)
            ImageIO.write(newImage, "jpg", new File("F:/test/pic2.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3.MultipartFile類型的圖片文件調(diào)整大小再保存:

 public JSONObject imageSizeAdjustment(MultipartFile file) {
        JSONObject result = new JSONObject();
        try {
       	    //從MultipartFile 中獲取 byte[]
            byte[] bytes = file.getBytes();
            //byte[]轉(zhuǎn) InputStream 
            InputStream in = new ByteArrayInputStream(bytes);
            //讀取圖片輸入流為 BufferedImage 
            BufferedImage image = ImageIO.read(in);
            System.out.println("Width: " + image.getWidth());
            System.out.println("Height: " + image.getHeight());
            //調(diào)整圖片大小
            BufferedImage newImage = ImageUtils.resizeImage(image, 200, 200);
            //圖像緩沖區(qū)圖片保存為圖片文件(文件不存在會(huì)自動(dòng)創(chuàng)建文件保存,文件存在會(huì)覆蓋原文件保存)
            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的開(kāi)源圖像大小調(diào)整庫(kù),它使用漸進(jìn)式雙線性縮放。它支持JPG,BMP,JPEG,WBMP,PNG和GIF。

通過(guò)將以下Maven依賴項(xiàng)添加到我們的pom.xml中,將其包括在我們的項(xiàng)目中:

<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);
    /**
     * 通過(guò)BufferedImage圖片流調(diào)整圖片大小
     */
    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圖片流轉(zhuǎn)byte[]數(shù)組
     */
    public static byte[] imageToBytes(BufferedImage bImage) {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            ImageIO.write(bImage, "jpg", out);
        } catch (IOException e) {
            logger.error("錯(cuò)誤信息: ", e);
        }
        return out.toByteArray();
    }
    /**
     * byte[]數(shù)組轉(zhuǎn)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("錯(cuò)誤信息: ", e);
        }
        return image;
    }
}

測(cè)試

和上面測(cè)試基本一樣只不過(guò) ImageUtils.resizeImage換成 ThumbnailsUtils.resizeImageOne即可。

最終效果:

原圖:

在這里插入圖片描述

長(zhǎng)寬縮為原來(lái)的三分之一后的圖:

在這里插入圖片描述

如果需要將 BufferedImage 轉(zhuǎn)換為 MultipartFile,請(qǐng)參考我另一篇文章:

BufferedImage轉(zhuǎn)換為MultipartFile

其他圖片大小調(diào)整方法請(qǐng)參考:

How Can I Resize an Image Using Java

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • StringBuilder為什么線程不安全深入講解

    StringBuilder為什么線程不安全深入講解

    這篇文章主要給大家介紹了關(guān)于StringBuilder為什么線程不安全的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用StringBuilder線程具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 關(guān)于SpringBoot3.x中spring.factories功能被移除的解決方案

    關(guān)于SpringBoot3.x中spring.factories功能被移除的解決方案

    這篇文章主要介紹了SpringBoot3.x中spring.factories功能被移除的解決方案,在配置好相關(guān)依賴、最小啟動(dòng)類和配置之后,發(fā)現(xiàn)項(xiàng)目無(wú)法啟動(dòng),于是根據(jù)啟動(dòng)上下文日志和按行DEBUG找到原因并且在等待組件升級(jí)兼容之前進(jìn)行臨時(shí)性解決,需要的朋友可以參考下
    2022-12-12
  • java對(duì)象與json對(duì)象之間互相轉(zhuǎn)換實(shí)現(xiàn)方法示例

    java對(duì)象與json對(duì)象之間互相轉(zhuǎn)換實(shí)現(xiàn)方法示例

    這篇文章主要介紹了java對(duì)象與json對(duì)象之間互相轉(zhuǎn)換實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了java對(duì)象與json對(duì)象相互轉(zhuǎn)換實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • SpringBoot+thymeleaf+ajax實(shí)現(xiàn)局部刷新詳情

    SpringBoot+thymeleaf+ajax實(shí)現(xiàn)局部刷新詳情

    這篇文章主要介紹了SpringBoot+thymeleaf+ajax實(shí)現(xiàn)局部刷新詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • springcloud?feign集成hystrix方式

    springcloud?feign集成hystrix方式

    這篇文章主要介紹了springcloud?feign集成hystrix方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • java控制臺(tái)輸出版多人聊天室

    java控制臺(tái)輸出版多人聊天室

    這篇文章主要為大家詳細(xì)介紹了java控制臺(tái)輸出版多人聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 解讀easyexcel中的常用注解

    解讀easyexcel中的常用注解

    這篇文章主要介紹了關(guān)于easyexcel中的常用注解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • java刪除文件和文件夾具體實(shí)現(xiàn)

    java刪除文件和文件夾具體實(shí)現(xiàn)

    這篇文章介紹了java刪除文件和文件夾具體實(shí)現(xiàn),有需要的朋友可以參考一下
    2013-10-10
  • Spring Gateway的入門概述及主要功能

    Spring Gateway的入門概述及主要功能

    Spring Gateway是Spring Cloud微服務(wù)生態(tài)下的網(wǎng)關(guān)組件,網(wǎng)絡(luò)層使用了基于非阻塞的 Netty使用異步IO增加了系統(tǒng)的性能,Gateway 是基于 Spring 5 和 Spring Boot 2 搭建的,這篇文章主要介紹了Spring Gateway的入門概述簡(jiǎn)介,需要的朋友可以參考下
    2024-04-04
  • Java中Arrays.sort自定義一維數(shù)組、二維數(shù)組的排序方式

    Java中Arrays.sort自定義一維數(shù)組、二維數(shù)組的排序方式

    這篇文章主要介紹了Java中Arrays.sort自定義一維數(shù)組、二維數(shù)組的排序方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評(píng)論