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

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

使用GifSequenceWriter將BufferedImages的ArrayList轉(zhuǎn)換為GIF

使用GifSequenceWriter將BufferedImages的ArrayList轉(zhuǎn)換為GIF

回首憶惘然 2021-04-30 12:43:46
我正在嘗試為隱寫術(shù)項(xiàng)目隱藏.gif內(nèi)的消息。我已經(jīng)將輸入的gif轉(zhuǎn)換為BufferedImages的ArrayList并應(yīng)用了隱寫算法。但是,我遇到了將BufferedImages的ArrayList轉(zhuǎn)換回.gif的問題。在從原始gif圖像元數(shù)據(jù)獲取幀之間的原始延遲之后,我使用了GifSequenceWriter類將BufferedImages數(shù)組轉(zhuǎn)換為新的.gif。  File encoded_img = new File("output.gif");  ImageOutputStream output = new FileImageOutputStream(encoded_img);  GifSequenceWriter writer =  new GifSequenceWriter(output, frames.get(0).getType(), delayTimeMS, true);  writer.writeToSequence(frames.get(0));  for(int k=1; k<frames.size()-1; k++) {    writer.writeToSequence(frames.get(k));  }  writer.close();  output.close();但是,生成的.gif看起來真的很糟糕,并且我保存了帶有或不帶有隱寫算法的單個(gè)幀,它們看起來還不錯(cuò)。您可以在此處查看原始圖像的示例,保存的10個(gè)幀以及生成的.gif 。有沒有更好的方法來在Java中創(chuàng)建.gifs?提前致謝。
查看完整描述

1 回答

?
九州編程

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

GifSequenceWriter使用調(diào)色板圖像(BufferedImage.TYPE_BYTE_INDEXED時(shí)IndexColorModel)存在的問題。這將基于默認(rèn)的216調(diào)色板網(wǎng)絡(luò)安全調(diào)色板)創(chuàng)建元數(shù)據(jù),該調(diào)色板與圖像中的顏色明顯不同。

有問題的行GifSequenceWriter

ImageTypeSpecifier imageTypeSpecifier = ImageTypeSpecifier.createFromBufferedImageType(imageType);
imageMetaData = gifWriter.getDefaultImageMetadata(imageTypeSpecifier, imageWriteParam);

而是,元數(shù)據(jù)應(yīng)基于圖像索引顏色模型中的調(diào)色板。但是,好消息是,沒有它,它會(huì)很好地工作。

您可以簡(jiǎn)單地使用:

GifSequenceWriter writer = new GifSequenceWriter(output, BufferedImage.TYPE_INT_ARGB, delayTimeMS, true);

...作者將根據(jù)您的實(shí)際圖像數(shù)據(jù)自動(dòng)創(chuàng)建調(diào)色板。

http://img1.sycdn.imooc.com//609b355d000182ed05000500.jpg

也可以修復(fù)GifSequenceWriter,以接受ImageTypeSpecifier而不是int imageType,但是,這僅在所有框架都使用相同的調(diào)色板時(shí)才有效,我認(rèn)為:


public GifSequenceWriter(

        ImageOutputStream outputStream,

        ImageTypeSpecifier imageTypeSpecifier, 

        int timeBetweenFramesMS,

        boolean loopContinuously) throws IIOException, IOException {

    // my method to create a writer

    gifWriter = getWriter();

    imageWriteParam = gifWriter.getDefaultWriteParam();


    imageMetaData = gifWriter.getDefaultImageMetadata(imageTypeSpecifier, imageWriteParam);


    // ... rest of the method unchanged. 

用法:


ColorModel cm = firstImage.getColorModel();

ImageTypeSpecifier imageType = new ImageTypeSpecifier(cm, cm.createCompatibleSampleModel(1, 1));

GifSequenceWriter writer = new GifSequenceWriter(output, imageType, delayTimeMS, true);


查看完整回答
反對(duì) 回復(fù) 2021-05-12
  • 1 回答
  • 0 關(guān)注
  • 364 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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