最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

方式一:使用Image.getScaledInstance

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

工具類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)文章

  • Java中List轉(zhuǎn)Array的兩種主要方式

    Java中List轉(zhuǎn)Array的兩種主要方式

    在Java中經(jīng)常遇到需要List與數(shù)組互相轉(zhuǎn)換的場景,這篇文章主要給大家介紹了關(guān)于Java中List轉(zhuǎn)Array的兩種主要方式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • finally 一定會執(zhí)行(實例代碼)

    finally 一定會執(zhí)行(實例代碼)

    下面小編就為大家?guī)硪黄猣inally 一定會執(zhí)行(實例代碼)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Java 中運行字符串表達式的方法

    Java 中運行字符串表達式的方法

    這篇文章主要介紹了Java 中運行字符串表達式的方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • Springboot遷移到Micronaut實現(xiàn)過程詳解

    Springboot遷移到Micronaut實現(xiàn)過程詳解

    這篇文章主要為大家?介紹了Springboot遷移到Micronaut實現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • java解決雪花ID在前端精度丟失問題

    java解決雪花ID在前端精度丟失問題

    雪花算法生成的64位Long類型ID在傳遞到前端時可能會因JavaScript的精度限制導(dǎo)致精度丟失,這篇文章主要介紹了java解決雪花ID在前端精度丟失問題的相關(guān)資料,需要的朋友可以參考下
    2024-11-11
  • Java匯編源碼如何查看環(huán)境搭建

    Java匯編源碼如何查看環(huán)境搭建

    這篇文章主要介紹了如何在IntelliJ IDEA開發(fā)環(huán)境中搭建字節(jié)碼和匯編環(huán)境,以便更好地進行代碼調(diào)優(yōu)和JVM學(xué)習(xí),首先,介紹了如何配置IntelliJ IDEA以方便查看Java字節(jié)碼文件,接著,詳細說明了如何下載和配置HSDIS插件,以便在IDEA中查看Java方法的匯編代碼
    2025-01-01
  • Spring Security使用單點登錄的權(quán)限功能

    Spring Security使用單點登錄的權(quán)限功能

    本文主要介紹了Spring Security使用單點登錄的權(quán)限功能,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • mybatis-plus分頁查詢的實現(xiàn)實例

    mybatis-plus分頁查詢的實現(xiàn)實例

    頁查詢是一項常用的數(shù)據(jù)庫查詢方法,本文主要介紹了mybatis-plus分頁查詢的實現(xiàn)實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • 一次由Lombok的@AllArgsConstructor注解引發(fā)的錯誤及解決

    一次由Lombok的@AllArgsConstructor注解引發(fā)的錯誤及解決

    這篇文章主要介紹了一次由Lombok的@AllArgsConstructor注解引發(fā)的錯誤及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • idea注解參數(shù)換行時間日期格式設(shè)置方法

    idea注解參數(shù)換行時間日期格式設(shè)置方法

    這篇文章主要介紹了idea注解參數(shù)換行時間日期格式設(shè)置方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05

最新評論

汶上县| 金湖县| 内黄县| 芮城县| 满城县| 喀什市| 凯里市| 鄱阳县| 青海省| 富顺县| 丹东市| 利辛县| 崇文区| 平和县| 蓬溪县| 安康市| 奉化市| 眉山市| 昌都县| 尉犁县| 班戈县| 乌鲁木齐县| 濮阳县| 水城县| 泌阳县| 天门市| 朝阳县| 宁蒗| 凤城市| 临城县| 嘉义市| 玛沁县| 开江县| 讷河市| 石家庄市| 界首市| 密云县| 永丰县| 思南县| 龙胜| 安岳县|