溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何進(jìn)行Java ImageIO圖像合并效率測(cè)試

發(fā)布時(shí)間:2021-10-29 15:49:16 來(lái)源:億速云 閱讀:146 作者:柒染 欄目:編程語(yǔ)言

這篇文章給大家介紹如何進(jìn)行Java ImageIO圖像合并效率測(cè)試,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

通過(guò)純Java的方式往一張底圖(地圖)上添加小圖片(布點(diǎn)),發(fā)現(xiàn)效果并不理想。

何為純java方式?就是說(shuō)這些操作不需要依賴(lài)于c/c++庫(kù),具有良好的跨平臺(tái)性,要求不僅僅能運(yùn)行在Windows、Linux、Unix三大平臺(tái)之上,也可以用作Android等移動(dòng)平臺(tái)之上。

下面是往一張底圖上添加小圖片(即圖像合并)的測(cè)試的數(shù)據(jù):

合并小圖數(shù)量

測(cè)試次數(shù)

100(張)

1000(張)

10000(張)

耗時(shí)(毫秒)

第1次

2003

15334

153010

第2次

1792

15200

153340

第3次

1869

15236

152673

第4次

1747

15903

154978

第5次

1871

16028

156506

第6次

1793

15545

154854

平均耗時(shí)(毫秒)


1845.833

15541

154226.8

換算為秒


1.845833

15.541

154.2268

往一張底圖上合并小圖100張平均耗時(shí)    1.845833秒,

往一張底圖上合并小圖1000張平均耗時(shí)  15.541秒,

往一張底圖上合并小圖10000張平均耗時(shí)       154.2268秒。

感覺(jué)這樣的效率還是太低了,無(wú)法滿(mǎn)足數(shù)以萬(wàn)計(jì)的底圖布點(diǎn)需求。據(jù)說(shuō),一段高效的c++程序完成數(shù)以萬(wàn)計(jì)的地圖布點(diǎn)任務(wù)也就需要大概一兩秒的時(shí)間(聽(tīng)一位頗有經(jīng)驗(yàn)的高手說(shuō)的,本人未曾嘗試)。

這次終于感受到j(luò)ava和c/c++在效率上的差距了!

那么是不是要犧牲跨平臺(tái)性了,用Jmagick嘗試一下?此問(wèn)題有待討論…

Jmagick嘗試圖像合并,利用了ImageMagick的命令來(lái)調(diào)用命令合并圖像的方式

<span style="white-space:pre">  </span>public void compositeImageList(List additionImageList,String srcImagePath,String toImagePath){          /*           *命令格式:composite -geometry +100+150 additionImagePath srcImagePath toImagePath            *將圖像additionImagePath附加在圖像srcImagePath上的100,150坐標(biāo)處,輸出為toImagePath圖像           */         //String command = "composite -geometry +100+150 D:/test/fileSource/007.png D:/test/fileSource/002.jpg D:/test/desk/rose-002.png";          if(additionImageList!=null){              System.out.println(additionImageList.size());              for(int i=0;i<additionImageList.size();i++){                  String[] additionImageInfo = (String[]) additionImageList.get(i);                  int x = Integer.parseInt(additionImageInfo[0]);                  int y = Integer.parseInt(additionImageInfo[1]);                  String additionImagePath = additionImageInfo[2];                  StringBuffer command = new StringBuffer("");                  command.append("composite -geometry ");                  command.append("+"+x+"+"+y+" ");                  command.append(additionImagePath+" ");                  command.append(srcImagePath+" ");                  command.append(toImagePath);                  System.out.println(command);                  String[] str = {command.toString()};                  JmagickTest.exec(str);              }          }      }
public static void main(String[] args) {      JmagickTest obj = new JmagickTest();//調(diào)用合并圖像方法所在的類(lèi)      try {          String additionImagePath = "D:/test/fileSource/007.png";          List additionImageList = new ArrayList();          for(int i = 0;i<100;i++){              Random random = new Random();              int x = random.nextInt(760);              int y = random.nextInt(1020);              String[] additionImageInfo = {x+"",y+"",additionImagePath};               additionImageList.add(additionImageInfo);          }          String srcImagePath = "D:/test/fileSource/004.jpg";          String toImagePath = "D:/test/fileSource/004.jpg";          long start = System.currentTimeMillis();          obj.compositeImageList(additionImageList, srcImagePath, toImagePath);          long end = System.currentTimeMillis();          System.out.println(end - start);      } catch (Exception e) {          e.printStackTrace();      }  }

以下是測(cè)試的數(shù)據(jù):

圖像數(shù)量 合并耗費(fèi)時(shí)間(ms)

1 ---- 140

10 ---- 1419

100 ---- 13912

1000 ---- 137965

10000 ---- 1392095

二者對(duì)比,發(fā)現(xiàn)以ImageMigick命令合并圖像的方式,效率明顯低于JDK 的ImageIO處理方式,并且在跨平臺(tái)上也遜色于純java的方式。

關(guān)于如何進(jìn)行Java ImageIO圖像合并效率測(cè)試就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI