第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Java修改圖片尺寸,總是報(bào)內(nèi)存溢出怎么解決?

Java修改圖片尺寸,總是報(bào)內(nèi)存溢出怎么解決?

慕田峪7331174 2019-03-12 09:19:31
項(xiàng)目需求:有很多尺寸很大的圖片(圖片大小可能幾十MB,甚至上百M(fèi)B),需要等比例縮小它們的尺寸,相當(dāng)于生成縮略圖。例如:原圖8268x6201,需要壓縮成400x300。我現(xiàn)在的方法:將圖片整個(gè)讀入內(nèi)存,然后修改寬、高,最后寫(xiě)回磁盤(pán)。核心代碼大概這樣:BufferedImage oldImg = ImageIO.read(in); BufferedImage newImg = new BufferedImage(400, 300, BufferedImage.TYPE_INT_RGB); Graphs2D g = newImg.createGraphics(); g.drawImage(oldImg, 0, 0, 400, 300, null); g.dispose(); ImageIO.write(newImg, 'jpg', new BufferedStream(out));但是由于圖片本身很大,而且可能會(huì)同時(shí)有多個(gè)線程在轉(zhuǎn),所以頻繁發(fā)生內(nèi)存溢出,報(bào)錯(cuò):java.lang.OutOfMemoryError: Java heap space.嘗試:我試過(guò)增大分配給JVM的內(nèi)存,但是效果不明顯。首先機(jī)器內(nèi)存有限,不可能無(wú)限增加。而且圖片的大小沒(méi)有上限,所以此方法不能很好地解決問(wèn)題。理想的情況,應(yīng)該是通過(guò)一種“流式的算法”,一邊把原始圖片從磁盤(pán)讀到內(nèi)存,一邊修改尺寸,一邊寫(xiě)到磁盤(pán)生成目標(biāo)圖片。這種算法理論上只需要常數(shù)級(jí)內(nèi)存空間。不過(guò)我在網(wǎng)上找了很久也沒(méi)有找到。我對(duì)圖形學(xué)、圖片格式、圖片處理相關(guān)的知識(shí)不熟悉,不知道是否存在這樣的算法,以及Java是否支持這樣的算法。在此請(qǐng)教大家。
查看完整描述

5 回答

?
斯蒂芬大帝

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊

GraphicsMagick+im4java可以處理,GraphicsMagick不用把整張圖片讀取到內(nèi)存中,比你用原生的效率高多了,你可以搜索看看,以前我們就是用GraphicsMagick處理圖片裁剪的


查看完整回答
反對(duì) 回復(fù) 2019-04-25
?
慕森王

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊

可以試試 ImageMagick


查看完整回答
反對(duì) 回復(fù) 2019-04-25
?
青春有我

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊

思路可以換一換,顯然內(nèi)存中是能存儲(chǔ)壓縮后的圖像的,而大圖像應(yīng)該應(yīng)該讀一部分處理后放到壓縮后的圖形中,總得來(lái)說(shuō)這個(gè)問(wèn)題不算難,思路換一下就行了


查看完整回答
反對(duì) 回復(fù) 2019-04-25
  • 5 回答
  • 0 關(guān)注
  • 1432 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)