欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

方式一:使用Image.getScaledInstance

使用jdk的awt包下的Image.getScaledInstance實現(xiàn)圖片的縮放。好處是無需引入第三方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圖片流調(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;
    }
}

測試

1.通過 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 {
            //通過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 (文件不存在會自動創(chuàng)建文件保存,文件存在會覆蓋原文件保存)
            ImageIO.write(newImage, "jpg", new File("F:/test/pic1.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2.通過讀取圖片文件調(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ū)圖片保存為圖片文件(文件不存在會自動創(chuàng)建文件保存,文件存在會覆蓋原文件保存)
            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ū)圖片保存為圖片文件(文件不存在會自動創(chuàng)建文件保存,文件存在會覆蓋原文件保存)
            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的開源圖像大小調(diào)整庫,它使用漸進式雙線性縮放。它支持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圖片流調(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("錯誤信息: ", 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("錯誤信息: ", e);
        }
        return image;
    }
}

測試

和上面測試基本一樣只不過 ImageUtils.resizeImage換成 ThumbnailsUtils.resizeImageOne即可。

最終效果:

原圖:

在這里插入圖片描述

長寬縮為原來的三分之一后的圖:

在這里插入圖片描述

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

BufferedImage轉(zhuǎn)換為MultipartFile

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

How Can I Resize an Image Using Java

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    springcloud?feign集成hystrix方式

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

    java控制臺輸出版多人聊天室

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

    解讀easyexcel中的常用注解

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

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

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

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

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

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

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

最新評論