[英]Issue with converting an ArrayList of BufferedImages to a GIF using GifSequenceWriter - Java
我正在嘗試為隱寫術項目隱藏.gif內的消息。 我已經將輸入的gif轉換為BufferedImages的ArrayList,並應用了隱寫算法。 但是,我遇到了將BufferedImages的ArrayList轉換回.gif的問題。 在從原始gif圖像元數據獲取幀之間的原始延遲之后,我使用了GifSequenceWriter類將BufferedImages數組轉換為新的.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看起來確實很糟糕,並且我保存了帶有或不帶有隱寫算法的單個幀,它們看起來不錯。 您可以在此處查看原始圖像的示例,保存的10個幀以及生成的.gif。
有沒有更好的方法來在Java中創建.gifs? 提前致謝。
使用調色板圖像時, GifSequenceWriter
存在問題(帶有IndexColorModel
BufferedImage.TYPE_BYTE_INDEXED
)。 這將基於默認的216調色板 ( 網絡安全調色板 )創建元數據,該調色板與圖像中的顏色明顯不同。
GifSequenceWriter
有問題的行:
ImageTypeSpecifier imageTypeSpecifier = ImageTypeSpecifier.createFromBufferedImageType(imageType);
imageMetaData = gifWriter.getDefaultImageMetadata(imageTypeSpecifier, imageWriteParam);
而是,元數據應基於圖像索引顏色模型中的調色板。 但是,好消息是,沒有它,它會很好地工作。
您可以簡單地使用:
GifSequenceWriter writer = new GifSequenceWriter(output, BufferedImage.TYPE_INT_ARGB, delayTimeMS, true);
...作者將根據您的實際圖像數據自動創建調色板。
也可以修復GifSequenceWriter
,以接受ImageTypeSpecifier
而不是int imageType
,但是,這僅在所有框架都使用相同的調色板時才有效,我認為:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.