`
三片仙人掌
  • 浏览: 12560 次
社区版块
存档分类
最新评论

解析Gif文件的每一帧为图片文件

阅读更多
方法一
网上下了解析gif的代码,有以下几个类(可以在网上找到):
AnimatedGifEncoder
GifDecoder
LZWEncoder
NeuQuant

调用的例子:
public static void main(String[] args) throws ImageFormatException,
			IOException {
		GifDecoder d = new GifDecoder();
		d.read("C:\\Users\\rui\\Desktop\\1.gif");
//		d.decodeImageData();
		int n = d.getFrameCount();
		System.out.println(d.gctFlag);
		System.out.println(d.gctSize);
		System.out.println(d.gct);
//		for(int i : d.gct) System.out.println(i);
		for (int i = 0; i < n; i++) {
			BufferedImage frame = d.getFrame(i); //  frame i
			
			int t = d.getDelay(i);
			FileOutputStream fos = new FileOutputStream("C:\\Users\\rui\\Desktop\\zrzr\\" + i + ".jpg");
			
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
			encoder.encode(frame);
			fos.close();
		}
	}



问题:
解析出来的图片颜色的怪怪的,背景是红色的...反正和原来看到的gif不一样,找半天原因,可能和 全局色表(global color table)有关,但还没弄明白。

方法二
File file = new File("C:\\Users\\Administrator\\Desktop\\1.gif");
		
		FileImageInputStream in = new FileImageInputStream(file);
		
        //GIFImageReader reader = null;
		ImageReaderSpi readerSpi = new GIFImageReaderSpi();
		
		//readerSpi.canDecodeInput(in);
		
		GIFImageReader gifReader = (GIFImageReader) readerSpi.createReaderInstance();
		
		gifReader.setInput(in);
		
		int num = gifReader.getNumImages(true);
		
		gifReader.getNumImages(true);
		
		System.out.println(num);
		
		ImageWriterSpi writerSpi = new GIFImageWriterSpi();
		
		GIFImageWriter writer = (GIFImageWriter) writerSpi.createWriterInstance();

		for (int i = 0; i < num; i++) {
			
			File newfile = new File("C:\\Users\\Administrator\\Desktop\\zrzr\\"+i+".jpg");
			
			FileImageOutputStream out = new FileImageOutputStream(newfile);
			
			writer.setOutput(out);
			
			writer.write(gifReader.read(i)); 
			
			out.close();
		}
分享到:
评论

相关推荐

    jquery获取gif图片每一帧

    `gif.js`是一个JavaScript库,它可以解析GIF文件并将其转换为HTML5 Canvas元素,这样我们就可以访问每一帧的信息。首先,你需要在项目中引入`gif.js`库。然后,你可以创建一个`Gif`对象,传入GIF图像的URL或数据URL...

    基于js读取gif文件,获取gif时长及各帧

    总结,通过JavaScript解析GIF文件,可以获取到GIF的时长以及每一帧的详细信息。这涉及到对GIF文件格式的理解,以及利用HTML5的FileReader API和可能的第三方库来处理数据。在实际应用中,这种技术可用于创建动态的...

    gif图片逐帧输出软件

    描述中的“可以把gif图片逐帧输出”,意味着该软件能够解析GIF文件的帧结构,并将每一帧提取出来。 在标签“逐帧”中,我们可以理解这个软件的核心特性是逐帧处理,这对于动画制作、动态效果分析或者GIF优化等工作...

    C++解码gif文件

    在本文中,我们将深入探讨GIF文件格式及其解码原理,并以C++编程语言为例,介绍如何实现这一过程。 GIF文件格式: 1. 头部:GIF文件以一个6字节的头部开始,包括"GIFF"标识和版本信息(87a或89a,89a版本增加了透明...

    IOS解析gif文件

    使用ImageIO解析Gif文件,使用QuzrtzCore完成gif动画的显示。能够控制gif图片中每帧的播放时间。 本工具类最大的特点就是考虑到Gif中每一帧画面的显示时间,网上现有的大部分Gif工具类都没有考虑到这一点,所以播放...

    简单实用的gif图片解码C语言实现

    本篇文章将深入探讨“简单实用的gif图片解码C语言实现”这一主题,帮助你理解和掌握如何用C语言解析GIF图像文件。 GIF解码过程通常包括以下几个步骤: 1. **文件头解析**:GIF文件以一个固定的6字节文件头开始,...

    提取GIF动画帧信息的PHP库

    GifFrameExtractor库通过解析GIF文件的头部信息,识别出图形控制扩展块(GCE)和图像数据块,从而能够解码出每一帧的具体属性。GCE块包含帧的延迟时间,而图像数据块则包含了实际的像素数据。 使用...

    Unity解析和显示/播放GIF图片,支持暂停、继续播放

    8. **实时渲染**:Unity可能需要将每一帧转化为Texture2D对象,并应用到`Image`组件上。这个过程需要实时进行,以确保GIF能流畅播放。 9. **错误处理**:考虑到网络状况和资源加载问题,良好的错误处理机制必不可少...

    java截取gif的每一帧(支持透明元素截取)

    我们可以使用`ImageIO.read()`方法读取GIF文件,然后通过`BufferedImage`对象访问其每一帧。 3. **解析GIF帧**: GIF文件包含一个图像头部,定义了全局颜色表、逻辑屏幕尺寸等信息,以及多个图像描述块,每个块...

    gif文件分解器

    在技术层面上,GIF分解涉及解析GIF文件的二进制格式,理解LZW(Lempel-Ziv-Welch)压缩算法,这是GIF文件中用来编码图像数据的常见方法。此外,还需要了解GIF的帧延迟时间,以便在重新组合时保持正确的播放速度。...

    C#制作和提取gif图片

    提取GIF的每一帧,需要解析GIF文件的结构,并获取每个逻辑屏幕描述符对应的图像数据: - **解析GIF文件**:使用库读取GIF文件,获取其头部信息和帧数据。 - **遍历GIF帧**:通过GIF的逻辑屏幕描述符,逐个提取帧...

    Flash的GIF图片加载解析器

    2. **解析GIF**:GIF文件包含帧信息、延迟时间、颜色表等数据,解析器需要理解这些数据结构,并将它们转换为ActionScript可以处理的形式。例如,解析GIF的逻辑可能会包括读取全局和局部颜色表,计算每个帧的位图数据...

    易语言图片框GIF播放速度补丁源码,易语言图片框GIF播放速度补丁

    了解了这些基础知识后,我们可以深入研究提供的源码,分析其具体实现方式,包括如何解析GIF文件结构、如何控制播放速度、如何优化性能等。通过阅读和学习这个补丁模块,开发者不仅可以掌握易语言中图片框控件的应用...

    GIF帧提取器

    总的来说,GIF帧提取器是一种实用工具,它通过解析GIF文件结构,提取并保存动画中的每一帧,满足了用户对GIF内容个性化处理的需求。对于开发者而言,实现这样的功能需要对图像编码和解码有深入理解,同时具备一定的...

    易语言GIF帧分解1源码,易语言GIF帧分解1.0

    该源码提供了分解GIF帧的实现方法,通过读取GIF文件头信息,解析GIF图像数据块,提取每一帧的数据。 4. **GIF信息读取**:在处理GIF文件时,需要了解其文件结构。GIF文件由头部信息、逻辑屏幕描述、全局颜色表、...

    gif文件转换Flash

    GIF2SWF工具的工作原理主要是解析GIF文件的帧序列,然后将每一帧转化为Flash的矢量图形,并结合时间轴信息生成SWF文件。这个过程不仅可以保留原始动画的效果,还可能通过Flash的优化机制减小文件大小。对于需要批量...

    GIF动态图片单帧提取保存工具.zip

    本压缩包“GIF动态图片单帧提取保存工具.zip”提供了处理GIF动态图片的工具,帮助用户轻松地从GIF文件中提取并保存每一帧图像。 首先,我们需要了解GIF动画的结构。GIF文件实际上是由多帧静态图像组成的,这些帧...

    Android-gif2png是一个GIF转换PNG的Java程序(转换为一张大图或者连续帧

    - 该程序解析GIF文件中的每一帧,提取图像数据。 - 对于转换为单张大图,它会将所有帧合并成一个大的PNG图像,通常适用于静态展示或预览。 - 对于转换为连续帧的PNG序列,每一帧都会被保存为单独的PNG文件,便于...

    Vc实现的Gif解析源代码

    1. `GifHeader`:用于存储和解析GIF文件头。 2. `ColorTable`:管理GIF的颜色表。 3. `ImageDescriptor`:解析和存储图像描述信息。 4. `LZWDecoder`:实现LZW压缩算法的解码过程。 5. `GifFrame`:表示GIF的一个帧...

    GIF图片分解器

    如果解压并研究这个文件,我们可以学习到如何实现上述功能,包括解析GIF文件格式、处理帧数据、实现用户交互等编程技术,这主要涉及C++、Python或其他编程语言的知识,以及图像处理库如libgif或PIL的使用。...

Global site tag (gtag.js) - Google Analytics