Java中實(shí)現(xiàn)高清圖片壓縮的兩種方案(最新推薦)
簡介:在Java中進(jìn)行高清圖片壓縮主要涉及圖像處理和文件編碼兩個(gè)方面。文章探討了使用Java標(biāo)準(zhǔn)庫ImageIO進(jìn)行圖片壓縮的基本方法,以及利用第三方庫Apache Commons Compress進(jìn)行更高級(jí)壓縮的可能性。通過示例代碼展示了如何通過調(diào)整圖像質(zhì)量和使用第三方工具來壓縮圖片文件。同時(shí)指出了這些方法的優(yōu)缺點(diǎn),并就實(shí)際項(xiàng)目中如何選擇適當(dāng)?shù)膲嚎s方法提供了建議。
1. Java圖像處理與文件編碼基礎(chǔ)
在數(shù)字媒體的世界里,圖像處理無處不在,無論是簡單的圖像顯示還是復(fù)雜的數(shù)據(jù)壓縮和轉(zhuǎn)換。Java作為一種廣泛使用的編程語言,在圖像處理方面也提供了強(qiáng)大的支持。通過Java的圖像I/O API,開發(fā)者可以輕松地實(shí)現(xiàn)圖像的讀取、顯示和存儲(chǔ),同時(shí)支持多種文件編碼和格式。
1.1 Java中的圖像處理基礎(chǔ)
Java的圖像處理能力從其標(biāo)準(zhǔn)庫中的 java.awt.image
和 javax.imageio
包中可以窺見一斑。這些包為圖像的加載、處理和導(dǎo)出提供了豐富的接口?;A(chǔ)的處理包括圖像的縮放、旋轉(zhuǎn)、顏色調(diào)整等,而更高級(jí)的應(yīng)用則涉及圖像的編碼和解碼,例如JPEG和PNG格式。
1.2 文件編碼在圖像處理中的重要性
文件編碼對(duì)于圖像文件的大小和質(zhì)量都有重要影響。不同的圖像文件格式,如JPEG、PNG、GIF等,各自有著不同的編碼方式和特性。理解這些編碼方式對(duì)于優(yōu)化圖像傳輸、存儲(chǔ)和顯示非常關(guān)鍵。例如,JPEG格式采用有損壓縮,適合照片等復(fù)雜圖像,而PNG格式使用無損壓縮,適合需要透明背景或質(zhì)量要求極高的場景。
在下一章節(jié)中,我們將深入探討如何使用Java中的ImageIO類進(jìn)行基本的圖像處理操作,并了解它支持的圖像格式。
2. ImageIO類的基本使用
在現(xiàn)代的Java開發(fā)中,圖像處理是不可或缺的一部分。ImageIO類作為Java內(nèi)置的一個(gè)圖像處理類庫,提供了簡單而強(qiáng)大的方式來讀取和寫入圖像文件。通過本章節(jié)的詳細(xì)解讀,讀者將深入了解ImageIO的功能和如何在應(yīng)用中實(shí)現(xiàn)圖像的讀取與輸出。
2.1 ImageIO類的功能介紹
2.1.1 ImageIO類的圖像讀取機(jī)制
ImageIO類允許開發(fā)者從不同來源讀取圖像數(shù)據(jù),它支持多種圖像格式,如JPEG, PNG, BMP等。通過ImageIO類,你可以將圖像文件加載到內(nèi)存中,轉(zhuǎn)換為 BufferedImage
對(duì)象,進(jìn)而進(jìn)行進(jìn)一步的處理。
// 示例代碼:讀取圖像文件 File inputSource = new File("path/to/image.jpg"); ImageInputStream stream = ImageIO.createImageInputStream(inputSource); Iterator<ImageReader> readers = ImageIO.getImageReaders(stream); if (readers.hasNext()) { ImageReader reader = readers.next(); reader.setInput(stream); BufferedImage image = reader.read(0); // 進(jìn)行后續(xù)處理 } stream.close();
在上述代碼段中,我們首先創(chuàng)建了一個(gè) File
實(shí)例指向圖像文件。之后,創(chuàng)建了 ImageInputStream
對(duì)象,并通過它獲取 ImageReader
實(shí)例。 ImageReader
的 read(0)
方法用于讀取圖像數(shù)據(jù),返回一個(gè) BufferedImage
對(duì)象。
2.1.2 ImageIO類的圖像輸出方法
ImageIO類同樣支持將 BufferedImage
對(duì)象寫入到圖像文件中。你可以根據(jù)需要輸出到JPEG、PNG等格式的文件。這個(gè)過程涉及創(chuàng)建一個(gè) ImageOutputStream
實(shí)例,并使用 ImageWriter
來寫入數(shù)據(jù)。
// 示例代碼:輸出圖像文件 File outputFile = new File("path/to/output.png"); ImageOutputStream output = ImageIO.createImageOutputStream(outputFile); Iterator<ImageWriter> writers = ImageIO.getImageWritersBySuffix("png"); if (writers.hasNext()) { ImageWriter writer = writers.next(); writer.setOutput(output); writer.write(null, new IIOImage(image, null, null), null); } output.close();
在這段代碼中,我們首先創(chuàng)建了一個(gè)指向輸出文件的 File
對(duì)象。然后,通過 ImageIO.createImageOutputStream
方法創(chuàng)建了一個(gè) ImageOutputStream
實(shí)例。之后,通過文件后綴名獲取相應(yīng)的 ImageWriter
實(shí)例并設(shè)置輸出流。最后,調(diào)用 writer.write()
方法將圖像數(shù)據(jù)寫入到文件中。
2.2 ImageIO類支持的圖像格式
2.2.1 常見圖像格式的處理能力
ImageIO類默認(rèn)支持常見的圖像格式,如JPEG, PNG, GIF, BMP等。然而,支持的格式還可能依賴于安裝在系統(tǒng)上的Java圖像IO擴(kuò)展(JAI)。對(duì)于一些不常見的格式,可能需要額外的插件支持。
在使用ImageIO處理圖像時(shí),可以利用 ImageIO.getImageReadersBySuffix(String)
方法和 ImageIO.getImageWritersBySuffix(String)
方法來獲取支持特定格式的讀寫器。
2.2.2 圖像格式之間的轉(zhuǎn)換實(shí)例
圖像格式之間的轉(zhuǎn)換也是ImageIO類的強(qiáng)項(xiàng)。通過讀取一種格式的圖像,然后將其寫入為另一種格式,可以實(shí)現(xiàn)格式轉(zhuǎn)換。
// 示例代碼:圖像格式轉(zhuǎn)換 // 上文中的讀取代碼省略,假設(shè)已經(jīng)得到了BufferedImage對(duì)象image File outputFile = new File("path/to/output.gif"); ImageOutputStream output = ImageIO.createImageOutputStream(outputFile); Iterator<ImageWriter> writers = ImageIO.getImageWritersBySuffix("gif"); if (writers.hasNext()) { ImageWriter writer = writers.next(); writer.setOutput(output); writer.write(null, new IIOImage(image, null, null), null); } output.close();
在此代碼段中,我們對(duì)之前讀取的 BufferedImage
對(duì)象進(jìn)行了GIF格式的輸出操作。這展示了從一種格式讀取圖像數(shù)據(jù),并轉(zhuǎn)換為另一種格式輸出的過程。
以上實(shí)例和代碼提供了對(duì)ImageIO類功能的一個(gè)全面概述,接下來將深入探討其他高級(jí)圖像處理庫和圖像壓縮技術(shù)。
3. JPEG壓縮質(zhì)量調(diào)整方法
3.1 JPEG壓縮原理概述
3.1.1 JPEG壓縮技術(shù)基礎(chǔ)
JPEG(Joint Photographic Experts Group)是一種廣泛使用的有損壓縮圖像格式,它通過犧牲一定的圖像質(zhì)量來換取較小的文件尺寸。這種格式特別適合于壓縮照片和自然場景圖片,這些圖片在壓縮后肉眼很難察覺到質(zhì)量的下降。
JPEG的壓縮過程分為兩個(gè)主要步驟:首先是變換編碼,其次是量化編碼。變換編碼通常使用離散余弦變換(Discrete Cosine Transform, DCT)將圖像從空間域轉(zhuǎn)換到頻率域,這一步使得能量集中在少數(shù)系數(shù)上,便于壓縮。量化編碼則是根據(jù)視覺心理學(xué)原理,對(duì)變換后的系數(shù)進(jìn)行有選擇的舍棄,最終達(dá)到壓縮的目的。
3.1.2 JPEG質(zhì)量參數(shù)的影響分析
JPEG格式的壓縮質(zhì)量是通過質(zhì)量因子(Quality Factor)來控制的,該參數(shù)的范圍通常是從0到100。質(zhì)量因子越高,壓縮時(shí)舍棄的信息越少,文件大小相對(duì)較大,圖像質(zhì)量更接近原始圖像;反之,質(zhì)量因子越低,壓縮率越高,但圖像細(xì)節(jié)損失越多,可能產(chǎn)生可見的壓縮偽影。
在實(shí)際應(yīng)用中,選擇合適的質(zhì)量因子需要考慮圖像的用途和顯示環(huán)境。例如,在網(wǎng)絡(luò)上快速顯示圖片時(shí),可以使用較低的質(zhì)量因子來加快加載速度;而在需要高質(zhì)量打印輸出的場合,則應(yīng)選擇較高的質(zhì)量因子以保留細(xì)節(jié)。
3.2 JPEG壓縮質(zhì)量調(diào)整實(shí)踐
3.2.1 使用ImageIO類調(diào)整JPEG質(zhì)量
在Java中,使用ImageIO類可以很方便地調(diào)整JPEG文件的壓縮質(zhì)量。以下是一個(gè)簡單的示例代碼,展示了如何讀取一個(gè)JPEG圖像,調(diào)整其壓縮質(zhì)量后保存為新的文件:
import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class JPEGQualityAdjust { public static void main(String[] args) throws IOException { // 加載原始JPEG圖像 File input = new File("original.jpg"); BufferedImage img = ImageIO.read(input); // 調(diào)整壓縮質(zhì)量 int quality = 75; // 設(shè)置JPEG質(zhì)量為75 File output = new File("adjusted_quality.jpg"); ImageIO.write(img, "jpg", output, ImageIO.createImageOutputStream(output), new javax.imageio.ImageWriter[]{new javax.imageio.plugins.jpeg.JPEGImageWriter(new javax.imageio.ImageWriterSpi())}); ((javax.imageio.plugins.jpeg.JPEGImageWriter) ImageIO.getImageWritersBySuffix("jpg").next()).setOutputQuality(quality); System.out.println("JPEG quality adjusted and saved."); } }
在這段代碼中, ImageIO.write
方法的最后一個(gè)參數(shù)是一個(gè) ImageOutputStream
,并且額外傳遞了一個(gè) ImageWriter
數(shù)組,這是為了設(shè)置JPEG輸出質(zhì)量。我們通過 setOutputQuality
方法來調(diào)整質(zhì)量因子。需要注意的是,ImageIO本身并不提供直接設(shè)置壓縮質(zhì)量的接口,而是通過 ImageWriter
的 setOutputQuality
方法來間接實(shí)現(xiàn)的。
3.2.2 壓縮質(zhì)量與視覺效果的關(guān)系
調(diào)整JPEG壓縮質(zhì)量對(duì)最終圖像的視覺效果有直接影響。高質(zhì)量因子產(chǎn)生的圖片細(xì)節(jié)保留較多,適合于需要高質(zhì)量顯示的場合;而低質(zhì)量因子生成的圖片,雖然尺寸更小,但可能會(huì)出現(xiàn)明顯的塊狀效應(yīng)和模糊現(xiàn)象。
為了更直觀地理解壓縮質(zhì)量與視覺效果之間的關(guān)系,可以進(jìn)行如下實(shí)驗(yàn):先使用不同的質(zhì)量因子保存同一張圖片,然后對(duì)比這些圖片的視覺效果和文件大小。通常情況下,壓縮質(zhì)量從100遞減到1,可以觀察到圖像細(xì)節(jié)逐漸丟失,而文件大小則逐漸減小。在這個(gè)過程中,可以繪制一個(gè)圖表來展示質(zhì)量因子與文件大小的關(guān)系,以便更直觀地評(píng)估不同壓縮設(shè)置的后果。
public class JPEGQualityExperiment { public static void main(String[] args) throws IOException { File input = new File("original.jpg"); BufferedImage img = ImageIO.read(input); int[] qualities = {100, 90, 80, 70, 60, 50, 40, 30, 20, 10}; for (int quality : qualities) { File output = new File("result_" + quality + ".jpg"); ImageIO.write(img, "jpg", output, ImageIO.createImageOutputStream(output)); ((javax.imageio.plugins.jpeg.JPEGImageWriter) ImageIO.getImageWritersBySuffix("jpg").next()).setOutputQuality(quality); } } }
通過上述代碼,我們可以生成一系列不同質(zhì)量因子的圖片文件,并觀察其視覺效果和文件大小的差異。這個(gè)實(shí)驗(yàn)有助于深入理解JPEG壓縮質(zhì)量與視覺效果之間的關(guān)聯(lián)性,并在實(shí)際應(yīng)用中做出更好的選擇。
4. Apache Commons Compress庫概述
在處理文件壓縮和解壓縮任務(wù)時(shí),Java開發(fā)者經(jīng)常遇到需要處理的文件類型繁多、格式各異的情況。在這種情況下,使用標(biāo)準(zhǔn)的Java庫可能不足以滿足所有的需求,而第三方庫如Apache Commons Compress庫,則提供了更為廣泛的支持和更強(qiáng)大的功能。本章將深入探討Apache Commons Compress庫,了解其在圖片壓縮中的應(yīng)用以及如何利用該庫提高文件處理效率。
4.1 Apache Commons Compress庫簡介
4.1.1 庫的安裝與配置
Apache Commons Compress 是一個(gè)非常強(qiáng)大的壓縮和解壓縮庫。它支持幾乎所有的主流壓縮文件格式,如 ZIP, TAR, GZIP, BZIP2, XZ, 和Hadoop-specific compression。
要在項(xiàng)目中使用Apache Commons Compress,通常的做法是將其依賴添加到項(xiàng)目的構(gòu)建配置文件中。例如,如果使用Maven構(gòu)建項(xiàng)目,可以在 pom.xml
文件中加入以下依賴:
<dependency> <groupId>***mons</groupId> <artifactId>commons-compress</artifactId> <version>1.20</version> <!-- 請(qǐng)檢查最新版本 --> </dependency>
使用Gradle構(gòu)建工具的項(xiàng)目則需要在 build.gradle
文件中添加:
implementation '***mons:commons-compress:1.20' // 請(qǐng)檢查最新版本
確保在代碼中導(dǎo)入相關(guān)的類:
``` press.archivers. ; * pressors. ;
### 4.1.2 庫的功能特點(diǎn) Apache Commons Compress庫的主要特點(diǎn)之一是其可擴(kuò)展的架構(gòu),它允許用戶輕松地添加對(duì)新壓縮算法的支持。其API設(shè)計(jì)簡潔,易于使用,具有很高的可讀性和可維護(hù)性。 該庫支持以下主要特點(diǎn): - 支持多種壓縮格式,包括但不限于ZIP, TAR, GZIP, BZIP2, XZ等。 - 對(duì)文件壓縮和解壓縮提供了簡單的API,支持讀取和寫入壓縮文件。 - 可以處理壓縮文件中的目錄結(jié)構(gòu),創(chuàng)建和訪問壓縮文件內(nèi)的子目錄。 - 可以控制壓縮和解壓縮過程中的內(nèi)存消耗和性能。 ## 4.2 Apache Commons Compress在圖片壓縮中的應(yīng)用 ### 4.2.1 利用Apache Commons Compress壓縮圖片 雖然Apache Commons Compress主要用于文件壓縮,但可以通過處理圖像文件的字節(jié)流來間接壓縮圖像。以下是使用Apache Commons Compress壓縮圖片的基本步驟: 1. 創(chuàng)建一個(gè)`ByteArrayOutputStream`,用于存放壓縮后的數(shù)據(jù)。 2. 創(chuàng)建一個(gè)`DeflaterOutputStream`(或特定格式的流,例如`GZIPOutputStream`),并將`ByteArrayOutputStream`作為輸出流。 3. 將圖片的字節(jié)數(shù)據(jù)寫入到`DeflaterOutputStream`。 4. 調(diào)用`close()`方法來完成壓縮過程。 下面是一個(gè)簡單的代碼示例: ```*** ***pressorStreamFactory; ***pressors.gzip.GzipParameters; ***pressors.gzip.GzipCompressorOutputStream; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.io.IOException; public class ImageCompressor { public static byte[] compressImage(byte[] imageBytes) throws IOException { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); try (OutputStream compressorStream = new GzipCompressorOutputStream(byteArrayOutputStream, new GzipParameters())) { compressorStream.write(imageBytes); } return byteArrayOutputStream.toByteArray(); } }
4.2.2 壓縮效率與圖片質(zhì)量的測試
壓縮效率和圖片質(zhì)量是壓縮圖片時(shí)需要考慮的兩個(gè)重要方面。使用Apache Commons Compress進(jìn)行壓縮時(shí),可以通過調(diào)整壓縮參數(shù)來平衡效率和質(zhì)量。例如,可以設(shè)置不同的 GzipParameters
來控制壓縮級(jí)別。
下面是一個(gè)調(diào)整壓縮級(jí)別的示例:
GzipParameters params = new GzipParameters(); params.setCompressionLevel(9); // 設(shè)置最高壓縮級(jí)別
為了評(píng)估壓縮效果,通常可以測量壓縮前后圖片的文件大小差異以及視覺上的質(zhì)量變化。可以通過以下代碼計(jì)算壓縮前后文件大小的比率:
double ratio = (double) compressedBytes.length / originalBytes.length; System.out.println("Compression ratio: " + ratio);
以上步驟可以結(jié)合實(shí)際的圖片文件和業(yè)務(wù)需求,進(jìn)一步優(yōu)化壓縮效率和質(zhì)量平衡。
請(qǐng)注意,本章節(jié)的內(nèi)容在介紹完Apache Commons Compress庫之后,以代碼塊的形式展示了如何使用該庫壓縮圖片,并討論了壓縮效率和圖片質(zhì)量的測試方法。代碼塊后給出了邏輯分析和參數(shù)說明,確保內(nèi)容的連貫性和深度。在實(shí)際應(yīng)用中,可根據(jù)具體需求調(diào)整壓縮參數(shù),并進(jìn)行相應(yīng)的測試以達(dá)到最優(yōu)效果。
5. 第三方圖像處理庫的探討
在當(dāng)今的開發(fā)場景中,處理圖像時(shí)往往需要更高級(jí)的功能和更好的性能。Java的標(biāo)準(zhǔn)庫雖然提供了基本的圖像處理能力,但對(duì)于更復(fù)雜的圖像處理任務(wù)來說,使用第三方庫會(huì)更加高效和專業(yè)。這一章節(jié)將深入探討第三方圖像處理庫的選擇標(biāo)準(zhǔn)、功能特點(diǎn)、以及如何實(shí)現(xiàn)高效的圖片壓縮。
5.1 第三方圖像處理庫的選擇標(biāo)準(zhǔn)
在選擇第三方圖像處理庫時(shí),有幾點(diǎn)需要特別關(guān)注,包括庫的功能、性能和穩(wěn)定性。
5.1.1 功能對(duì)比分析
第三方圖像處理庫通常提供比Java標(biāo)準(zhǔn)庫更豐富的圖像處理功能,例如:
- 格式支持 :不同的庫支持的圖像格式可能有所不同,例如支持PNG、JPEG、GIF、BMP等。
- 處理能力 :是否支持圖像轉(zhuǎn)換、縮放、旋轉(zhuǎn)、濾鏡等高級(jí)操作。
- 批量處理 :是否能夠高效地處理大批量的圖像。
5.1.2 性能與穩(wěn)定性考量
- 性能測試 :可以通過基準(zhǔn)測試來比較不同庫的處理速度和內(nèi)存占用情況。
- 穩(wěn)定性 :穩(wěn)定性可以從庫的更新頻率和社區(qū)支持活躍度進(jìn)行評(píng)估。
5.2 常見第三方圖像處理庫實(shí)戰(zhàn)
接下來,我們將通過一個(gè)實(shí)際案例來探討如何使用一個(gè)常見的第三方圖像處理庫來實(shí)現(xiàn)圖片壓縮。
5.2.1 選擇一個(gè)庫并實(shí)現(xiàn)圖片壓縮
以 imgscalr
庫為例,這是一個(gè)簡單易用的Java圖像縮放庫,它提供了高質(zhì)量的圖像縮放算法。首先需要添加Maven依賴到項(xiàng)目中:
<dependency> <groupId>org.imgscalr</groupId> <artifactId>imgscalr-lib</artifactId> <version>4.2</version> </dependency>
然后,實(shí)現(xiàn)一個(gè)簡單的圖片壓縮方法:
import org.imgscalr.Scalr; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.OutputStream; public class ImageCompression { public static void compressImage(String inputImagePath, String outputImagePath, int quality) throws IOException { BufferedImage originalImage = ImageIO.read(new File(inputImagePath)); BufferedImage compressedImage = Scalr.resize(originalImage, Scalr.Method.ULTRA_QUALITY, quality); ImageIO.write(compressedImage, "jpg", new File(outputImagePath)); } }
5.2.2 壓縮效果對(duì)比與案例分析
在實(shí)施壓縮后,我們可以對(duì)比壓縮前后的圖片質(zhì)量,以及文件大小的差異??梢允褂靡恍﹫D像分析工具或庫來進(jìn)行比較,例如使用 SSIM
(結(jié)構(gòu)相似性指數(shù))來衡量圖像質(zhì)量的差異。
在案例分析中,我們還可以探討不同圖片格式(如JPEG、PNG)在壓縮效率和質(zhì)量保持上的差異,以及不同壓縮質(zhì)量參數(shù)如何影響最終結(jié)果。
通過實(shí)踐和對(duì)比分析,選擇一個(gè)合適的第三方圖像處理庫可以大大提升圖像處理任務(wù)的效率和質(zhì)量。在下一章節(jié),我們將繼續(xù)討論如何在代碼的簡潔性與壓縮效果之間找到一個(gè)平衡點(diǎn)。
到此這篇關(guān)于Java中實(shí)現(xiàn)高清圖片壓縮的兩種技術(shù)方案的文章就介紹到這了,更多相關(guān)java高清圖片壓縮內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中Set與List的關(guān)系與區(qū)別介紹
這篇文章主要介紹了Java中Set與List的關(guān)系與區(qū)別介紹,本文總結(jié)它們兩個(gè)接口都是繼承自Collection、它們之間的存儲(chǔ)方式不一樣,需要的朋友可以參考下2015-03-03Java實(shí)現(xiàn)批量發(fā)送帶附件的郵件代碼
大家好,本篇文章主要講的是Java實(shí)現(xiàn)批量發(fā)送帶附件的郵件代碼,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2022-01-01Springboot如何通過路徑映射獲取本機(jī)圖片資源
項(xiàng)目中對(duì)圖片的處理與查看是必不可少的,本文將講解如何通過項(xiàng)目路徑來獲取到本機(jī)電腦的圖片資源,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-08-08MyBatis-Plus實(shí)現(xiàn)對(duì)查詢結(jié)果進(jìn)行分頁的基本步驟
MyBatis-Plus 是一個(gè) MyBatis 的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生,MyBatis-Plus 支持多種數(shù)據(jù)庫的分頁查詢,其分頁功能是通過 Page 類實(shí)現(xiàn)的,本文介紹了使用 MyBatis-Plus 實(shí)現(xiàn)分頁查詢的基本步驟,需要的朋友可以參考下2024-08-08JavaMail整合Spring實(shí)現(xiàn)郵件發(fā)送功能
這篇文章主要為大家詳細(xì)介紹了JavaMail整合Spring實(shí)現(xiàn)郵件發(fā)送功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08