精华内容
下载资源
问答
  • apng序列帧png制作工具 APNG apngasm_gui.exe 直接把多个png序列拖到面板中,自动生成APNG动态图片。
  • apng画布v2.1.0 ( ) 在使用画布的浏览器中显示Animated PNG(,)的库。 工作演示: ://davidmz.github.io/apng-canvas/(约3 Mb的apng文件) 请注意! 该库的API版本2与API版本1不兼容! 该库需要以下技术的...
  • APNG Anime Maker.exe

    2020-12-16 09:47:58
    apng序列帧png制作工具 APNG Anime Maker.exe 直接把多个png序列拖到面板中,自动生成APNG动态图片。
  • 该程序将APNG文件转换为单个PNG帧的序列。 命令行界面和GUI版本。 另外,可以在http://sourceforge.net/projects/apngasm中找到APNG汇编程序。
  • MATLAB 类animatedPNGWriter 用于创建动画PNG (APNG) 文件。 此类文件具有与动画 GIF 文件类似的应用程序,但通常具有更高的质量和更小的文件大小。 大多数 Web 浏览器支持动画 PNG 文件的方式与支持动画 GIF 文件的...
  • APNG-canvas-with-controller APNG-canvas-with-controller 是控制 apng 的库,它基于 ( )。 应用程序接口 ani.stop() 动画播放() ani.goto() ani.playto() 使用示例 APNG . ifNeeded ( function ( ) { for ...
  • 从PNG / TGA图像序列创建高度优化的Animated PNG文件。 适用于所有主要操作系统的CLI版本。 Windows和macOS的GUI版本。 另外,可以在http://sourceforge.net/projects/apngdis中找到APNG反汇编程序
  • 该程序将APNG动画转换为GIF动画格式。 Wu64量化用于真彩色文件。 透明度可以使用阈值来处理,也可以通过选择的背景色来处理。 CLI版本独立于操作系统,GUI版本适用于Windows。 另一个转换器:...
  • 在Android中支持APNG和Webp和Gif动画 高效解码器 支持Drawable用法和滑动库模块 支持动画播放控制 支持静止图像 内存使用率低 用法 在build.gradle中添加依赖项 repositories { mavenCentral() } WebP动画 ...
  • 该程序将 GIF 动画转换为动画 PNG 格式。 通常它会使文件更小。 CLI 版本独立于操作系统,GUI 版本适用于 Windows。 另一个转换器:http://sourceforge.net/projects/apng2gif
  • 该程序将GIF动画转换为动画PNG格式。 通常,它会使文件更小。 CLI版本独立于操作系统,GUI版本适用于Windows。 另一个转换器:http://sourceforge.net/projects/apng2gif
  • APNG动画

    千次阅读 2015-07-06 07:40:40
    APNG历史、特性简介以及APNG制作演示: http://www.zhangxinxu.com/wordpress/2014/09/apng-history-character-maker-editor/ APNG Software: http://littlesvr.ca/apng/ APNG Assembler: ...
    APNG历史、特性简介以及APNG制作演示: http://www.zhangxinxu.com/wordpress/2014/09/apng-history-character-maker-editor/
    


    APNG Software: http://littlesvr.ca/apng/


    APNG Assembler: http://sourceforge.net/projects/apngasm/?source=typ_redirect


    APNG specification: https://developer.mozilla.org/en-US/docs/Animated_PNG_graphics
    https://wiki.mozilla.org/APNG_Specification
    https://en.wikipedia.org/wiki/APNG


    PNG图片转换成bitmap: http://blog.chinaunix.net/uid-736168-id-376075.html


    使用 Libpng 配合 GDI 完成对 png 图片的解析与显示: http://www.cnblogs.com/mr-wid/archive/2013/04/22/3034840.html




    使用libpng显示png图片: http://blog.csdn.net/qiuchangyong/article/details/30271955


    使用libpng读取PNG图片像素数据: http://blog.csdn.net/yshen_dublin/article/details/4954011
    展开全文
  • APNG编译器版本:2.91

    2021-08-08 15:54:36
    软件原名:APNG Assembler 汉化名称:APNG编译器 软件介绍: APNG Assembler creates APNG animation from PNG/TGA image sequence. A number of optimization techniques used to make APNG files as small as ...
  • APNG patch for libpng-开源

    2021-05-09 17:57:58
    动画便携式网络图形(APNG)是便携式网络图形(PNG)格式的非官方扩展。 APNG修补程序为libpng提供APNG支持。
  • android apng支持框架

    2017-04-01 18:17:34
    框架主页https://github.com/aellerton/japng_android,Android apng支持框架,自己打包成aar
  • apng-canvas.js

    2017-09-14 21:52:45
    APNG经过修改后,在QT,浏览器上可用的apng-canvas.js 参考博客使用:http://blog.csdn.net/ly305750665/article/details/77972415
  • apng2mp4 一个节点实用程序应用程序,它使用ffmpeg WRT帧延迟将APNG批量转换为MP4视频。 最好的用例是通过提供APNG格式文件来生成 (MP4) 虽然可能已经有工具可以做到这一点。 这个项目是为了学术目的 学分 安装...
  • apng2gif.sf.net.rar

    2019-10-14 12:19:07
    gif2apng is a simple program that converts animations from GIF to APNG format. It disproves the common misconception that Animated PNG files are always too big, as it actually creates APNG files ...
  • VirtualDub APNG Mod-开源

    2021-05-09 15:34:23
    VirtualDub APNG Mod的创建是为了为流行的视频编辑软件VirtualDub提供Animated PNG支持。 导出模块旨在尽可能多地压缩输出文件。 内部输入驱动程序可以加载APNG文件,以进行更多编辑。
  • APngDemo:APng使用-源码

    2021-02-20 06:44:43
    APngDemo:APng使用
  • QtApng:Qt的apng图像插件,支持动画PNG
  • APNG、WebP 转换器.zip

    2019-09-24 13:38:28
    APNG、WebP 转换器.zip,APNG、WebP converter
  • apng2gif可视化转换器

    2015-07-01 10:32:43
    apng2gif可视化转换器 快速转换apng为gif
  • 上一章我们主要生成“gif”动态图片,本章主要针对图片的另一个png的扩展动态图片类型”apng“做特殊处理。 非常重要: 收回下面这句话,FFmpegFrameRecorder可以支持apng动态图片录制,不需要定制的FrameRecorder...

    javacv实战专栏目录:

    JavaCV实战专栏文章目录(JavaCV速查手册)


     

    前言

    前面十章,我们已经可以获取摄像机、桌面/窗口屏幕、视频文件、流媒体等视频画面,以及录制文件,推流到流媒体服务等等方式,根据之前的文章也可以实现截图。

    上一章我们主要生成“gif”动态图片,本章主要针对图片的另一个png的扩展动态图片类型”apng“做特殊处理。

    非常重要:

    收回下面这句话,FFmpegFrameRecorder可以支持apng动态图片录制,不需要定制的FrameRecorder的代码请参考后面的优化后代码

    由于javaCV的FrameRecorder实现不支持apng动态图片录制,所以我们对FFmpegFrameRecorder进行扩展实现出支持apng的录制器。本章的ApngFrameRecorder是在上一章GifFrameRecorder实现代码的基础上进行扩展实行,参考上一章文章最后。

    扩展两个部分:

    1、设置apng格式

    在上一章327行,if (imageWidth > 0 && imageHeight > 0) 后面添加一个apng格式设置

    else if("apng".equals(format_name)) {
                     oformat.video_codec(AV_CODEC_ID_APNG);
     }

    2、设置像素格式

    展开全文
  • ffmpeg 解码 png apng 图片

    千次阅读 2017-05-25 20:08:06
    ffmpeg 解码 png apng 图片 1,搭建环境 参考网上搭建 ubuntu 下 ffmpeg 环境 2. 定义解码结构体 typedef struct Decode_PNG_Key{ int video_stream_index; AVFormatContext *pFormatCtx; ...

    ffmpeg 解码 png apng 图片

    1,搭建环境
    参考网上搭建 ubuntu 下 ffmpeg 环境

    2. 定义解码结构体
    typedef struct Decode_PNG_Key{
    	 int video_stream_index;
    	 AVFormatContext *pFormatCtx;
    	 AVCodecContext *pCodecCtx;
    	AVCodec *dec;
    	int init_flag;
    	int decode_flag;
    	AVFrame *filt_frame;
    } Decode_Png_key;

    3, 初始化编码器
    int decode_png_init(Decode_Png_key *args, char *filename)
    {
    	int ret = 0;
    	if (args == NULL || filename == NULL )
    		return -1;
    	if ((ret = avformat_open_input(&args->pFormatCtx, filename, NULL, NULL)) < 0)
    	{
    		dm_printf("Cannot open input file");
    		goto end;
    	}
    	if ((ret = avformat_find_stream_info(args->pFormatCtx, NULL)) < 0)
    	{
    		dm_printf("Cannot find stream information\n");
    		goto end;
    	}
    
    	for(int i = 0; i < args->pFormatCtx->nb_streams; i++)
    	{
    		if(args->pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
    		{
    			args->video_stream_index = i;
    			break;
    		}
    	}
    	args->pCodecCtx = args->pFormatCtx->streams[args->video_stream_index]->codec;
    	args->dec = avcodec_find_decoder(args->pCodecCtx->codec_id);
    	if(args->dec == NULL)
    	{
    		fprintf(stderr, "can not find decoder!\n");
    		goto end;
    	}
    
    	av_opt_set_int(args->pCodecCtx, "refcounted_frames", 1, 0);
    	/* init the video decoder */
    	if ((ret = avcodec_open2(args->pCodecCtx, args->dec, NULL)) < 0)
    	{
    		dm_printf("Cannot open video decoder\n");
    		goto end;
    	}
    	args->filt_frame = av_frame_alloc();
    	if (args->filt_frame == NULL)
    		ret = -1;
    end:
    	if (ret < 0)
    	{
    		if (args->pCodecCtx)
    		{
    			avcodec_close(args->pCodecCtx);
    			args->pCodecCtx = NULL;
    		}
    		if (args->pFormatCtx)
    		{
    			avformat_close_input(&args->pFormatCtx);
    			args->pFormatCtx = NULL;
    		}
    	}
    	else
    		args->init_flag = 1;
    	return ret;
    }
    



    4. 编码一张图片
    这个切记一定编码一次不一定成功,所以需要多加几次循环才能最终编码成功
    int decode_png_next(Decode_Png_key *args, AVFrame *filt_frame)
    {
    	int ret = -1;
    	int got_frame = 0;
    	int decLen = 0;
    	int error_count = 0;
    	AVPacket  packet;
    	memset(&packet, 0, sizeof(packet));
    	if (args == NULL || filt_frame == NULL || args->pCodecCtx == NULL)
    	{
    		dm_printf("args == NULL || filt_frame== NULL || args->pCodecCtx == NULL");
    		return -1;
    	}
    	av_init_packet(&packet);
    	packet.data = NULL;
    	while(1)
    	{
    		if ((ret = av_read_frame(args->pFormatCtx, &packet)) < 0)
    		{
    			dm_printf("png_read_over");
    			av_free_packet(&packet);
    			break;
    		}
    		if (packet.stream_index == args->video_stream_index)
    		{
    			got_frame = 0;
    			while (packet.size > 0)
    			{
    				decLen = avcodec_decode_video2(args->pCodecCtx, filt_frame, &got_frame, &packet);
    				error_count++;
    				if (error_count > 50)
    				{
    					av_free_packet(&packet);
    					ret = -1;
    					break;
    				}
    				if (decLen < 0)
    				{
    					decLen = packet.size;
    					packet.data += decLen;
    					packet.size -= decLen;
    				}
    				if (got_frame)
    				{
    
    					dm_printf("[video_decode_example]picture->linesize[0]=%d, c->width=%d,c->height=%d,c->format=  %d\n",
    					          filt_frame->linesize[0], filt_frame->width, filt_frame->height, filt_frame->format);
    					packet.data += decLen;
    					packet.size -= decLen;
    					ret = 0;
    
    				}
    			}
    			av_free_packet(&packet);
    			if (got_frame)
    				break;
    		}
    		else
    		{
    			/* discard non-wanted packets */
    			av_free_packet(&packet);
    		}
    	}
    	if (ret == 0)
    		args->decode_flag = 1;
    	else
    		args->decode_flag = 0;
    	return ret;
    }
    

    5. 释放资源
     
    int decode_png_release(Decode_Png_key *args)
    {
    	if (args == NULL)
    		return -1;
    	if (args->pCodecCtx)
    	{
    		avcodec_close(args->pCodecCtx);
    		args->pCodecCtx = NULL;
    	}
    	if (args->pFormatCtx)
    	{
    		avformat_close_input(&args->pFormatCtx);
    		args->pFormatCtx = NULL;
    	}
    	if (args->filt_frame != NULL)
    		av_frame_free(&args->filt_frame );
    	memset(args, 0, sizeof(Decode_Png_key));
    	return 0;
    }
    


    展开全文
  • ffmpeg 编码 png apng图片

    千次阅读 2017-05-25 19:58:36
    ffmpeg 编码 png apng图片 1. 搭建环境 首先需要搭建ubuntu下,ffmpeg开发环境,这个网上有很多在这里就不多叙述了 2. 定义编码器相关的结构体 typedef struct Encode_PNG_Key{ AVFormatContext* ...

    ffmpeg 编码 png apng图片

    1. 搭建环境
    首先需要搭建ubuntu下,ffmpeg开发环境,这个网上有很多在这里就不多叙述了


    2.  定义编码器相关的结构体
    typedef struct Encode_PNG_Key{
    	AVFormatContext* pFormatCtx;  
    	AVOutputFormat* fmt;  
    	AVStream* video_st; 
    	AVCodecContext* pCodecCtx;	
    	AVCodec* pCodec;  
    } Encode_Png_key;

    3. 初始化编码器

    这个需要你特别注意,再找编码器格式的千万不要av_guess_format(NULL,  "out.png", NULL);
    中间的png找到的是JPEG的编码器,通过阅读源码很容易发现,所以如果你确定是编码png,切记要下边方式找到输出的编码器
    int encode_png_init(Encode_Png_key *args, char *filename, int width, int height, const enum AVPixelFormat pix_fmt)
    {
    	int ret = 0;
    	if (args == NULL || filename == NULL )
    		return -1;
    	args->pFormatCtx = avformat_alloc_context();
    	//Guess format
    	args->fmt = av_guess_format(NULL, NULL, "image/png");
    	if (args->fmt == NULL)
    	{
    		ret = -1;
    		dm_printf("av_guess_format fail.");
    		goto end;
    	}
    	args->pFormatCtx->oformat = args->fmt;
    	//Output URL
    	if (avio_open(&args->pFormatCtx->pb, filename, AVIO_FLAG_READ_WRITE) < 0)
    	{
    		dm_printf("Couldn't open output file.");
    		ret = -1;
    		goto end;
    	}
    
    	//Method 2. More simple
    	//avformat_alloc_output_context2(&pFormatCtx, NULL, NULL, out_file);
    	//fmt = pFormatCtx->oformat;
    
    	args->video_st = avformat_new_stream(args->pFormatCtx, 0);
    	if (args->video_st == NULL)
    	{
    		ret = -1;
    		goto end;
    	}
    	args->pCodecCtx = args->video_st->codec;
    	args->pCodecCtx->codec_id = args->fmt->video_codec;
    	args->pCodecCtx->codec_type = AVMEDIA_TYPE_VIDEO;
    	args->pCodecCtx->pix_fmt = pix_fmt;
    
    	args->pCodecCtx->width = width;
    	args->pCodecCtx->height = height;
    
    	args->pCodecCtx->time_base.num = 1;
    	args->pCodecCtx->time_base.den = 25;
    	//Output some information
    	av_dump_format(args->pFormatCtx, 0, filename, 1);
    
    	args->pCodec = avcodec_find_encoder(args->pCodecCtx->codec_id);
    	if (!args->pCodec)
    	{
    		dm_printf("Codec not found.");
    		ret = -1;
    		goto end;
    	}
    	if (avcodec_open2(args->pCodecCtx, args->pCodec, NULL) < 0)
    	{
    		dm_printf("Could not open codec.");
    		ret = -1;
    		goto end;
    	}
    	//Write Header
    	avformat_write_header(args->pFormatCtx, NULL);
    end:
    	if (ret < 0)
    	{
    		if (args->video_st)
    		{
    			avcodec_close(args->video_st->codec);
    		}
    		if (args->pFormatCtx != NULL && args->pFormatCtx->pb != NULL)
    		{
    			avio_close(args->pFormatCtx->pb);
    		}
    		if (args->pFormatCtx != NULL)
    			avformat_free_context(args->pFormatCtx);
    		memset(args, 0, sizeof(Encode_Png_key));
    	}
    	return ret;
    }
    

    4,编码一桢图片

    int encode_png(Encode_Png_key *args, AVFrame *frame)
    {
    	int ret = -1;
    	int got_frame = 0;
    	AVPacket  packet;
    	memset(&packet, 0, sizeof(packet));
    	if (args == NULL  || args->pCodecCtx == NULL)
    	{
    		dm_printf("args == NULL || filt_frame== NULL || args->pCodecCtx == NULL");
    		return -1;
    	}
    	av_init_packet(&packet);
    	packet.data = NULL;
    	//Encode
    	ret = avcodec_encode_video2( args->pCodecCtx, &packet, frame, &got_frame);
    	if(ret < 0)
    	{
    		dm_printf("Encode Error.\n");
    		return -1;
    	}
    	if (got_frame == 1)
    	{
    		packet.stream_index =  args->video_st->index;
    		ret = av_write_frame( args->pFormatCtx, &packet);
    	}
    	else
    		vflush_encoder(args->pFormatCtx, 0);
    	av_free_packet(&packet);
    	args->pCodecCtx->frame_number = 0;
    	return ret;
    }
    


    5, 释放资源

    int encode_png_release(Encode_Png_key *args)
    {
    	if (args != NULL)
    	{
    		if (args->pFormatCtx != NULL)
    		{
    
    			//Write Trailer
    			av_write_trailer(args->pFormatCtx);
    		}
    		if (args->video_st)
    		{
    			avcodec_close(args->video_st->codec);
    		}
    		if (args->pFormatCtx != NULL && args->pFormatCtx->pb != NULL)
    		{
    			avio_close(args->pFormatCtx->pb);
    		}
    		if (args->pFormatCtx != NULL)
    			avformat_free_context(args->pFormatCtx);
    		memset(args, 0, sizeof(Encode_Png_key));
    	}
    	return 0;
    }
    

    另外apng是无损压缩的png动图,这个比gif动态效果好,非常适合手机端动图开发


    展开全文
  • 在命令行下运行的 APNG 汇编程序是作为独立版本的流行的 APNG 汇编程序设计简单,基于命令行应用程序。 APNG 汇编程序是可访问的工具,能够从 PNG/TGA 图像序列创建 APNG 动画
  • QT之APNG插件应用

    千次阅读 2018-04-11 19:39:07
    QT之APNG插件应用 QT之APNG插件应用 简述 效果 代码 apnglib库编译步骤 结尾 简述 之前,关于apng的图片我只能在浏览器上展示,但是无意之间看到Github一篇关于apng插件在QT上的应用。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 513,173
精华内容 205,269
关键字:

apng