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

Java中如何獲取圖片文件格式(后綴)

 更新時間:2023年06月12日 14:58:27   作者:CringKong  
這篇文章主要介紹了Java中如何獲取圖片文件格式(后綴),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Java獲取圖片文件格式(后綴)

今天做一個爬蟲,使用正則匹配到<img>標(biāo)簽以后,直接用InputStream流進(jìn)行下載到內(nèi)存,然后再使用FileOutputStream保存到硬盤,但是要獲取圖片文件格式再進(jìn)行保存。

一開始使用了正則截取,比如<img src="/book/en/v2/images/basic-branching-1.png" />,就直接用字符串截取.png的內(nèi)容

String imgSrc = "/book/en/v2/images/basic-branching-1.png";
String formatName = imgSrc.split("\\.")[1];

但是后來突然想到如果URL的path里就帶有 . 那怎么辦(雖然我沒見到過)

假設(shè)一個圖片標(biāo)簽 <img src="/book/en/v2/.hahaha/basic-branching-1.png" />,那這樣就不能保證是截取到后綴。

想到PHP和Python都有直接處理圖片的庫,很方便,Java應(yīng)該也有這種操作吧。

經(jīng)過去StackOverflow查找一番,發(fā)現(xiàn)確實Java這種操作很麻煩,所以自己實現(xiàn)了一個工具方法。

? ? public static List<String> getImageFormat(InputStream srcInputStream) throws IOException {
? ? ? ? List<String> formatNameList = new ArrayList<>();
? ? ? ? // 獲取ImageInputStream 對象
? ? ? ? ImageInputStream imageInputStream = ImageIO.createImageInputStream(srcInputStream);
? ? ? ? // 獲取ImageReader對象的迭代器
? ? ? ? Iterator<ImageReader> iterator = ImageIO.getImageReaders(imageInputStream);
? ? ? ? // 如果能獲得ImageReader對象則說明流中含有圖片文件
? ? ? ? while(iterator.hasNext()) {
? ? ? ? ? ? // ImageReader對象的getFormatName()方法可以獲得圖片格式
? ? ? ? ? ? formatNameList.add(iterator.next().getFormatName());
? ? ? ? }
? ? ? ? return formatNameList;
? ? }

這樣我們就能從連續(xù)的圖片文件流中獲取多個圖片文件,實現(xiàn)獲取文件真實格式到的后綴。

Java代碼獲取圖片格式及顏色模型

近期服務(wù)器總是在上傳下載圖片的時候出現(xiàn)CPU飆高的情況,想對上傳方法進(jìn)行下改進(jìn),查到了一個方法使用ImageIO.read()讀取圖片,但是可能存在讀取CMYK編碼的JPEG圖片失真問題,本片文章先用Java代碼查看給定圖片的格式以及顏色模型。

顏色模型

CMYK(Cyan, Magenta, Yellow, Black - Key Plate)模型,指的是使用(青色,品紅、黃、黑)4種印刷使用的油墨顏色,作為保存圖片的格式。它主要用在印刷中, 讓i印刷色彩更加逼真。

RGB模式,是使用(紅、綠、藍(lán))三基色, 作為保存圖片的格式。RGB值通常使用三個指定0到255之間的整數(shù),分別代表紅、綠、藍(lán)色的強(qiáng)度。它主要用于網(wǎng)頁設(shè)計中, 方便屏幕顯示。

二者在文件保存格式上是有區(qū)別的,我們可以通過JPG文件的保存格式上區(qū)分:

(1)CMYK模式:JPEG文件中前8個字節(jié)是FF D8 FF E1

(2)RGB模式:JPEG文件中前8個字節(jié)是FF D8 FF E0

Java代碼查看圖片類型,以及將圖片轉(zhuǎn)十六進(jìn)制

package com.flex;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import org.junit.Test;
public class TestImage {
	@Test
	public void testImageFormat() {
		File img = new File("F:/1518048669186_0ssai3.jpg");
		System.out.println(getImageFormat(img));//JPEG
	}
	@Test
	public void testColorFormat() {
		getImageHex("F:/1518048669186_0ssai3.jpg");
		System.out.println("image.text長度:" + new File("F:/image.txt").length());
	}
	/*
	 * 獲得圖片的格式,例如:JPEG、GIF等
	 */
	public String getImageFormat(Object obj) {
		try {
			ImageInputStream iis = ImageIO.createImageInputStream(obj);
			Iterator<ImageReader> iterator = ImageIO.getImageReaders(iis);
			while (iterator.hasNext()) {
				ImageReader reader = (ImageReader) iterator.next();
				return reader.getFormatName();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
	/*
	 * 圖片轉(zhuǎn)十六進(jìn)制
	 */
	public void getImageHex(String path) {
		try {
			Long start = System.currentTimeMillis();
			FileInputStream fis = new FileInputStream(path);
			java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();
			byte[] buff = new byte[1024];
			int len = 0;
			while ((len = fis.read(buff)) != -1) {
				bos.write(buff, 0, len);
			}
			// 得到圖片的字節(jié)數(shù)組
			byte[] result = bos.toByteArray();
			// 字節(jié)數(shù)組轉(zhuǎn)成十六進(jìn)制
			String str = byte2HexStr(result);
			// 將十六進(jìn)制串保存到txt文件中
			PrintWriter pw = new PrintWriter(new FileWriter("F:/image.txt"));
			pw.println(str);
			pw.close();
			Long end = System.currentTimeMillis();
			System.out.println("圖片轉(zhuǎn)十六進(jìn)制花費(fèi)時間:" + (end - start));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/*
	 * 實現(xiàn)字節(jié)數(shù)組向十六進(jìn)制的轉(zhuǎn)換方法
	 */
	public static String byte2HexStr(byte[] b) {
		String hs = "";
		String stmp = "";
		for (int n = 0; n < b.length; n++) {
			stmp = (Integer.toHexString(b[n] & 0XFF));
			if (stmp.length() == 1)
				hs = hs + "0" + stmp;
			else
				hs = hs + stmp;
		}
		return hs.toUpperCase();
	}
}

結(jié)果如圖

總結(jié)

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

相關(guān)文章

  • Java List與數(shù)組互轉(zhuǎn)方式

    Java List與數(shù)組互轉(zhuǎn)方式

    這篇文章主要介紹了Java List與數(shù)組互轉(zhuǎn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 部署springboot項目到云服務(wù)器的兩種方式(jar+war)

    部署springboot項目到云服務(wù)器的兩種方式(jar+war)

    本文主要介紹了部署springboot項目到云服務(wù)器的兩種方式,主要介紹了jar和war兩種方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • SpringBoot集成Elasticsearch過程實例

    SpringBoot集成Elasticsearch過程實例

    這篇文章主要介紹了SpringBoot集成Elasticsearch過程實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Java中實現(xiàn)對中文字符的精確判斷的方法

    Java中實現(xiàn)對中文字符的精確判斷的方法

    在開發(fā)涉及多語言處理的應(yīng)用時,經(jīng)常需要對輸入的文本進(jìn)行語言或字符類型的判斷,特別是在中文環(huán)境下,準(zhǔn)確地識別中文字符對于文本處理、數(shù)據(jù)驗證等操作至關(guān)重要,本文將介紹如何在Java中實現(xiàn)對中文字符的精確判斷,需要的朋友可以參考下
    2025-12-12
  • SpringBoot@DeleteMapping(/xxx/{id})請求報405的解決

    SpringBoot@DeleteMapping(/xxx/{id})請求報405的解決

    這篇文章主要介紹了SpringBoot@DeleteMapping(/xxx/{id})請求報405的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • JAVA并發(fā)編程有界緩存的實現(xiàn)詳解

    JAVA并發(fā)編程有界緩存的實現(xiàn)詳解

    這篇文章主要介紹了JAVA并發(fā)編程有界緩存的實現(xiàn)詳解的相關(guān)資料,這里舉例說明如何實現(xiàn),四種方法一一代碼實現(xiàn),需要的朋友可以參考下
    2016-12-12
  • java JOptionPane類的介紹

    java JOptionPane類的介紹

    java JOptionPane類的介紹,需要的朋友可以參考一下
    2013-04-04
  • Java Guava排序器Ordering原理及代碼實例

    Java Guava排序器Ordering原理及代碼實例

    這篇文章主要介紹了Java Guava排序器Ordering原理及代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • 淺析Java迭代器Iterator和Iterable的區(qū)別

    淺析Java迭代器Iterator和Iterable的區(qū)別

    Java語言中,Iterator和Iterable都是用來遍歷集合類數(shù)據(jù)結(jié)構(gòu)的接口,雖然它們有很多相似的地方,但在具體實現(xiàn)中卻有著一些不同之處,本文將詳細(xì)分析它們的區(qū)別,并提供相應(yīng)的代碼示例,需要的朋友可以參考下
    2023-07-07
  • Java使用Apache POI和EasyExcel讀取Excel文件的實現(xiàn)方案

    Java使用Apache POI和EasyExcel讀取Excel文件的實現(xiàn)方案

    Java 讀取 Excel 文件核心依賴 Apache POI(兼容 .xls(Excel 97-2003)和 .xlsx(Excel 2007+))或 EasyExcel(阿里開源,低內(nèi)存、高性能),以下是兩種主流方案的完整實現(xiàn),需要的朋友可以參考下
    2025-12-12

最新評論

始兴县| 青川县| 新乡县| 旬阳县| 明星| 澜沧| 茌平县| 新民市| 长春市| 黑山县| 中西区| 玛曲县| 阳西县| 阳信县| 满城县| 河南省| 大港区| 香格里拉县| 木里| 灵丘县| 青冈县| 遂宁市| 于田县| 平邑县| 黄陵县| 花莲县| 榆中县| 辽宁省| 马关县| 托克托县| 边坝县| 那曲县| 六安市| 安陆市| 宜都市| 永春县| 陇南市| 常熟市| 东乌珠穆沁旗| 西和县| 贵定县|